それは私を夢中にさせています。私は3つのモデルを持っています。ユーザー、写真、コメント。
これが私がやりたいことです。
ユーザーは多くの写真とコメントを持っています
写真はユーザーのもので、多くのコメントがあります
コメントはユーザーと写真に属します
したがって、私のモデルには次の関連付けがあります。
ユーザー
has_many :photos, :dependent => :destroy
has_many :comments, :dependent => :destroy
写真
belongs_to :user
has_many :users, :through => :comments
has_many :comments, :dependent => :destroy
コメント
belongs_to :photo, :user
写真を表示し、この写真のすべてのコメントを読み込み、各コメントをユーザー情報とともに表示したいと思います。
だから私が持っている写真コントローラショーアクションで
@photo = Photo.find(params[:id], :include => :comments, :order => 'comments.created_at DESC')
そして写真/ショービューで
=render :partial => "/comments/partials/comment", :collection => @photo.comments, :as => :comment
コメントを表示します。コメントテキストは問題ありませんが、パーシャル内では次のことを試みます。
%p=comment.user.fname
%p=comment.body
「nil:NilClass の未定義メソッド `fname'」というエラーがスローされます。
奇妙なことに、私はユーザー authlogic であるため、コメントを投稿するにはログインする必要があります。ただし、ログインしていなくてもコメントを見ることができます。ログオフしているときは、find が機能します。ログインすると、エラーがスローされます。
それが私を狂わせているので、どんな助けも大歓迎です。
ところで、私のルートでは
map.resources :users, :has_many => [:photos, :comments]
map.resources :photos, :has_many => [:comments, :users]
ありがとう