我已经广泛搜索了这个(也许我发现它错了),但我似乎无法找到任何答案。我的目标是遍历我的数据库中的一堆注释,并将信息输出到我的视图。不幸的是,我的.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"
答案 0 :(得分:0)
您从控制台发布的输出是正常的:
c
变量包含评论)content
而不做任何事情因此输出是变量@comments
的内容。
现在,如果你打电话给puts c.content
,你将会得到你所期待的。
说明:
如果您正在使用Rails 3(如本问题的标签所述),则不应使用find_by_all_
助手,而应使用where()
方法(您应该查看这免费 railscast:http://railscasts.com/episodes/202-active-record-queries-in-rails-3)。
您应该使用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 %>