我有一个模型方法
def full_name_find(user_id)
user = User.find(user_id)
"#{user.first_name} #{user.last_name}"
end
在User
模型中。我想从另一个视图(门票#show)中调用它,我似乎无法让它工作。
我试过了:
<%= User.full_name_find(comment.user_id) %>
其中comment有user_id。我得到undefined method 'full_name_find' for #<Class:0x007fd188e41108>
。当我将full_name_find
方法粘贴到应用程序帮助器并在视图中调用时,我才能使它工作:
<%= full_name_find(comment.user_id) %>
它有效。有什么建议吗?
答案 0 :(得分:4)
您可以通过将其设为类方法来实现它,即将self.
放在其名称之前:
def self.full_name_find(user_id)
user = find(user_id)
"#{user.first_name} #{user.last_name}"
end
User.full_name_find(123)
# => "Jane Doe"
......但这很奇怪。在一个应该返回用户名的方法中进行数据库操作(User.find
)是没有意义的。一个更惯用的方法是一个简单的实例方法,它将使您能够获得任何用户实例的全名:
class User < ActiveRecord::Base
# ...
def full_name
"#{first_name} #{last_name}"
end
end
然后,在您看来:
<%= comment.user.full_name %>
由于上述原因这更好(更不用说简单了),但也因为当您加载评论时,您可以使用includes
来加载相关用户(例如{{1}因此,您不必执行大量额外的数据库请求来获取用户的名称。