0

我已经对此进行了广泛的搜索(也许我搜索错了),但我似乎找不到任何答案。我的目标是遍历数据库中的一堆评论并将信息输出到我的视图中。不幸的是,我的.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" 
4

1 回答 1

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. 然后你可以在你的视图中使用它:

<% if @photo.comments.present? %>
  <% @photo.comments.each do |comment| %>
    <%= link_to comment.user.name, comment.user_id %><br />
    <%= comment.content %>
  <% end %>
<% end %>
于 2013-04-09T18:06:27.270 回答