我试图解决这个问题。我知道观点不应该有太多的逻辑。我有一个用户,帖子和评论的应用程序。用户有很多帖子和评论。
class User < ActiveRecord::Base
has_many :posts
has_many :comments
帖子属于用户并且有很多评论。
class Post < ActiveRecord::Base
has_many :comments
belongs_to :user
评论属于用户和帖子
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user
在我的帖子#show view中,我在帖子下显示评论。我想显示发表评论的用户的名字。目前我认为这是:
<% @post.comments.each do |comment| %>
<p>
<b>Commenter:</b>
<%= link_to User.find(comment.userid).login, User.find(comment.userid) %>
</p>
<p>
<b>Comment:</b>
<%= comment.body %>
</p>
<% end %>
我应该在我的帖子控制器中有这个逻辑。但我很困惑。 @ post.comments返回属于帖子的评论数组(?)。这意味着我不能拥有@commenter = @ post.comments.userid。我对这个问题很困惑,所以我可能没解释清楚。
答案 0 :(得分:4)
要在第一个答案中更明确,您只需执行此操作:
<%= link_to comment.user, comment.user %>
在您的用户模型中,像这样覆盖to_s方法,以便comment.user返回您想要的字符串:
def to_s
self.login
end
最后,使用预先加载来获取一次SQL调用中的所有数据,而不是为每个comment.user分别查询数据库。在你的Post模型中:
class Post < ActiveRecord::Base
has_many :comments, :include => :user
在Post控制器中:
def show
@post = Post.find(params[:id], :include => :comments)
答案 1 :(得分:3)
事实上,在评论循环期间,您可以使用comment.user
来获取用户的数据,因为您已宣布User
has_many
Comments
关系。