我有一个模型方法
def full_name_find(user_id)
user = User.find(user_id)
"#{user.first_name} #{user.last_name}"
end
在 User
中模型。我想从另一个 View (tickets#show) 调用它,但我似乎无法让它工作。
我试过:
<%= User.full_name_find(comment.user_id) %>
其中评论有一个 user_id。我得到 undefined method 'full_name_find' for #<Class:0x007fd188e41108>
.我只有坚持 full_name_find
才能让它工作方法进入应用程序助手并在 View 中调用:
<%= full_name_find(comment.user_id) %>
并且有效。有什么建议吗?
最佳答案
您可以通过将其设为类方法使其工作,即在其名称前添加 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
) 没有意义。一个更惯用的方法是一个简单的实例方法,它将使您能够获得任何 User 实例的全名:
class User < ActiveRecord::Base
# ...
def full_name
"#{first_name} #{last_name}"
end
end
那么,在你看来:
<%= comment.user.full_name %>
由于上述原因,这要好得多(更不用说更简单了),而且还因为当您加载您的评论时,您可以使用 includes
来预先加载关联的用户(例如 Comment.where(...).includes(:user)
),因此您不必执行一大堆额外的数据库请求来获取用户名。
关于ruby-on-rails - 从不同的 View 调用模型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30565447/