2016-05-25 3 views
0

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

У меня также есть метод 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 с параметром (current_language). Если нет, есть ли другой способ заставить это работать?

пс. И нет возможности переписать текущий_язык как новый модельный метод в Модели, потому что он сложнее, чем кажется.

Заранее благодарен!

ответ

0

Попробуйте

 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 

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

0

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

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

<%= fb.collection_select(:id, User.all,:id, Proc.new{ model_method(current_language) }, {}, {})%> 
Смежные вопросы