Ruby on Rails'发现'问题

时间:2010-08-23 03:01:02

标签: ruby-on-rails ruby

我目前正在使用:

@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注释。

4 个答案:

答案 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}