2016-05-25 7 views
0

私は次のような問題があります。私はテーブルUserと、ローカライゼーションのための2番目のテーブルUserStringを持っているとしましょう。 UserStringsには次の列があります。{user_id、language_id、full_name}Railsでparamsを使ってモデルメソッドを呼び出す

また、現在の言語のIDを返すApplicationControllerのcurrent_languageメソッドもあります。

私はcollection_selectを使用する必要があり、現在の言語のユーザー名をリストに表示する必要があります。

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

Userテーブルには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。モデルの新しいモデルメソッドとしてcurrent_languageを書き直すことは不可能ではありません。

ありがとうございます!

答えて

0

あなたはそれが直接、あなたがその

0

collection_selectのための動的メソッドを定義する必要はありませんすることができ、この

 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 

を試してみても、メソッド名(docs)の代わりに、PROCを受け入れます。

私はそれを試してみることができていないが、これは動作するはずです:

<%= fb.collection_select(:id, User.all,:id, Proc.new{ model_method(current_language) }, {}, {})%> 
関連する問題