Вызов метода модели с парами в Rails

У меня есть следующая проблема, скажем, у меня есть таблица Users и вторая таблица UserStrings для локализации. UserStrings имеет следующие столбцы {user_id, language_id, full_name}

У меня также есть метод current_language в ApplicationController, который возвращает идентификатор текущего языка.

Я должен использовать collection_select и мне нужно отобразить имена пользователей текущего языка в списке.

<%= fb.collection_select(:id, User.all,:id, :full_name, {}, {})%>

Дело в том, что в пользовательской таблице нет столбца full_name. Я знаю, что можно сделать метод модели и назвать его вместо имени.

<%= fb.collection_select(:id, User.all,:id, :model_method, {}, {})%>

Этот метод модели я хотел запустить эту маленькую линию

self.user_strings.find_by(:language_id => current_language).full_name

Вот проблема, я знаю, что невозможно использовать метод контроллера в моделях, поэтому я не могу получить current_language в моей модели. Можно ли вызвать: model_method с помощью param (current_language). Если нет, есть ли другой способ заставить это работать?

ПС. И нет его невозможно переписать current_language как новый метод модели в Model, потому что это сложнее, чем кажется.

Заранее спасибо!

2 ответа

  1. Попробовать это

            def method_missing(m, *args, &block)  
                 match = m.to_s.match(/regex of languages here/)
                  if match
                    self.user_strings.find_by(:language_id => match).first_name + self.user_strings.find_by(:language_id => match).last_name
                  else
                   nil
                 end
          end  
    

    Вы не можете это напрямую вам нужно определить динамический метод для этого

  2. collection_select также принимает Proc вместо имени метода (docs).

    Я не смог попробовать, но это должно сработать:

    <%= fb.collection_select(:id, User.all,:id, Proc.new{ model_method(current_language) }, {}, {})%>