2

それは私を夢中にさせています。私は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]

ありがとう

4

2 に答える 2

0

+1 ハムルの使用

これが起こるかもしれないいくつかの理由を考えることができます

まず、コードから次の行を削除するとどうなりますか?

# try removing this
%p=comment.user.fname

エラーは次の変数 (つまり、comment.body) に移動しますか?

そうでない場合は、少なくとも fname 変数に絞り込みました。この場合、最初のデータベース エントリをいくつか作成した後で、モデルに fname 変数を追加したのではないかと思います。これは、hte エントリの一部に fname 変数が関連付けられていないことを意味します。この場合、データベースをスクラブして最初から再移行することで問題を解決できます

また、モデルの fname 変数に attr_accessible を設定していますか? すべての変数に対してこれが設定されていることを確認してください。

データベース内を調べて、すべてのエントリに fname 変数が設定されていることを確認できますか?

あなたがこれを機能させたいと思っていることは理解していますが、それができない場合は、disqus.com プラグインを使用することを恥じることはありません.db スペースを節約し、多くの人がすでにプロファイルを持っているため、より多くのコメントを引き付けるのに役立ち、気の利いたものを提供します.モデレーター機能...マイナス面としては、ブランディングが失われ、独自の rjs 効果を使用できなくなります..

幸運を

于 2010-03-02T22:37:22.997 に答える
0

これが違いを生むかどうかはわかりませんが、belongs_to アソシエーションを分離しようとしましたか?

belongs_to :photo
belongs_to :user
于 2010-03-02T19:10:34.833 に答える