从.each do块访问对象的参数?

时间:2013-04-09 17:48:48

标签: ruby ruby-on-rails-3

我已经广泛搜索了这个(也许我发现它错了),但我似乎无法找到任何答案。我的目标是遍历我的数据库中的一堆注释,并将信息输出到我的视图。不幸的是,我的.each do块似乎无法正常工作。

模型/ comment.rb

class Comment < ActiveRecord::Base
  attr_accessible :content, :photo_id, :user_id
  belongs_to :user
  belongs_to :photo

控制器/ photos_controller.rb

def show
  @photos = Photo.all
  @photo = Photo.find(params[:id])
  @user_likes = user_likes(@photo.id)
  @comments = Comment.find_all_by_photo_id(@photo.id)

视图/照片/ show.html.erb

  <% if !@comments.blank? %>
    <% @comments.each do |c| %>
      <%= link_to c.user.name, c.user_id %><br />
      <%= c.content %>
    <% end %>
  <% end %>

如果我使用@comments.each do |c|, c.(anything),它将不会返回任何内容。我也在rails控制台中验证了这一点。但是,@comments.first.content@comments.first.user.name将返回我正在寻找的内容。为什么.first允许我返回内容用户字段,但.each do |c|不返回任何内容?

这是rails控制台的输出:

1.9.3-p385 :072 > @comments.each do |c|
1.9.3-p385 :073 >     c.content
1.9.3-p385 :074?>   end
 => [#<Comment id: 1, user_id: 8, photo_id: 27, content: "lalala", created_at: "2013-04-09 15:36:22", updated_at: "2013-04-09 15:36:22">, #<Comment id: 2, user_id: 8, photo_id: 27, content: "abcd", created_at: "2013-04-09 15:42:00", updated_at: "2013-04-09 15:42:00">, #<Comment id: 3, user_id: 8, photo_id: 27, content: "abadsf", created_at: "2013-04-09 15:58:33", updated_at: "2013-04-09 15:58:33">, #<Comment id: 4, user_id: 8, photo_id: 27, content: "asdf", created_at: "2013-04-09 15:59:12", updated_at: "2013-04-09 15:59:12">] 

1.9.3-p385 :075 > @comments.first.content
 => "lalala" 

1 个答案:

答案 0 :(得分:0)

您从控制台发布的输出是正常的:

  • 您正在迭代每条评论(以便块中的c变量包含评论)
  • 然后你只是在该实例上调用属性content而不做任何事情

因此输出是变量@comments的内容。 现在,如果你打电话给puts c.content,你将会得到你所期待的。

说明:

  1. 如果您正在使用Rails 3(如本问题的标签所述),则不应使用find_by_all_助手,而应使用where()方法(您应该查看这免费 railscast:http://railscasts.com/episodes/202-active-record-queries-in-rails-3)。

  2. 您应该使用Rails关系,这样您就可以执行Comment.find_all_by_photo_id(@photo.id)而不是@photo.comments。 然后,您可以在视图中使用它:

  3. <% if @photo.comments.present? %>
      <% @photo.comments.each do |comment| %>
        <%= link_to comment.user.name, comment.user_id %><br />
        <%= comment.content %>
      <% end %>
    <% end %>
    
相关问题