0

私はこれを広範囲に検索しました(おそらく間違って検索しています)が、これに関する答えが見つからないようです。私の目的は、データベース内の一連のコメントを繰り返し処理し、情報をビューに出力することです。残念ながら、私の.each doブロックは機能していないようです。

モデル/コメント.rb

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

.

controllers/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 に答える