我目前正在使用:
@user = User.find(params[:id])
@posts = Post.find(:all, :conditions => ["user_id = ?", @user.id])
@comments = Comment.find(:all, :conditions => ["user_id = ?", @user.id])
用于标识用户,并列出他们所做的所有评论。但是,我想设置一个局部变量以在_comment.html.erb模板中使用。我希望变量列出位于post表的'name'列中的帖子名称。
我尝试过:
@post_id = @comments.post_id
@post_name = @post_id.name
但它显示了一个数组错误(因为@comments列出了用户注释数组)。我需要找到一种方法来找到每条评论的post_id。然而,当我尝试使用像
这样的东西时@post_id = @comments.each.post_id
它显示错误,因为它不识别'post_id'作为方法。我希望它输出post_id列中的任何内容以供EACH注释。
答案 0 :(得分:5)
你说这一切都错了。我们的想法是使用关联,因此rails将为您提供访问器。您应该只使用find
来获得最高记录。 Rails将为您填充关联。
def User
has_many :posts
has_many :comments
end
def Post
belongs_to :user
end
然后您的代码变为:
@user = User.find(params[:id])
# you can omit these and just use @user.posts and @user.comments in your view
@posts = @user.posts
@comments = @user.comments
如果您想为每条评论输出一些内容,请在视图中使用循环
<div class="comments">
<% @user.posts.each do |p| %>
<div class="post">
<%= p.body %>
</div>
<% end %>
</div>
答案 1 :(得分:1)
当您可以更好地利用关联时,不要自己发出问题。
如果用户has_many
发帖,发布has_many
个帖子,您就可以这样做。
user.posts
和
post.comments
此外,它看起来像用户has_many
评论,因此您可以直接执行
user.comments
要从评论中获取帖子ID,请在帖子中发表评论belongs_to
,然后您可以执行以下操作:
comment.post.id # or comment.post.name directly
答案 2 :(得分:1)
class User
has_many :posts
end
class Post
belonds_to :user
has_many :comments
end
class Comment
belongs_to :post
end
<h1>users contriller</h1>
@user = User.includes(:posts).where(:id => params[:id]).first
<h1>in posts view</h1>
<div class="comments">
<% @user.posts.each do |p| %>
<div class="post">
<%= p.name %>
</div>
<% end %>
</div>
<h1>in comment view</h1>
<div class="comments">
<% @user.posts.each do |p| %>
<div class="post">
<%= p.comments.body %>
</div>
<% end %>
</div>
答案 3 :(得分:0)
帖子有很多评论
并且评论属于帖子。应该创建外键或帖子和评论之间的粘合剂。
请记住@user包含附有评论的所有帖子。
所以要获得评论ID,请转到@ user.each.post({| post |
post.comment}