在Rails中调用带有params的模型方法



我有以下问题,假设我有一个表Users和第二个表UserStrings用于本地化。UserStrings具有以下列{user_id、language_id、full_name}

我在ApplicationController中还有一个current_language方法,它返回当前语言的id。

我必须使用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

问题是,我知道在Models中不可能使用控制器方法,所以我无法在我的Model中获得current_language。是否可以使用param(current_language)调用:model_method。如果没有,还有其他方法可以让它发挥作用吗?

ps。不,在model中将current_language重写为新的模型方法是不可能的,因为它比看起来更复杂。

提前感谢!

试试这个

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  

你不能直接定义的动态方法

collection_select也接受Proc来代替方法名(docs)。

我还没能尝试一下,但这应该有效:

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

相关内容

  • 没有找到相关文章

最新更新