2016-05-25 65 views
0

我有以下問題,可以說我有一個表用戶和第二個表UserStrings用於本地化。 UserStrings有以下列{user_id,language_id,full_name}用Rails調用帶參數的模型方法

我還有一個ApplicationController中的current_language方法,它返回當前語言的id。

我必須使用一個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我的模型。是否可以用param(current_language)調用:model_method。如果沒有其他方法可以使這個工作?

ps。並且不可能將當前語言重寫爲模型中的新模型方法,因爲它比看起來更復雜。

提前致謝!

回答

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) }, {}, {})%>