【发布时间】:2010-03-02 09:17:17
【问题描述】:
这让我发疯。我有 3 个模型。用户、照片、评论。
这就是我想要做的。
一个用户有很多照片和cmets
一张照片属于一个用户,有很多个cmets
评论属于用户和照片
所以我的模型有这些关联:
用户
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
我现在想显示一张照片并加载这张照片的所有 cmets 并显示带有用户信息的每条评论。
所以在照片控制器中我有显示操作
@photo = Photo.find(params[:id], :include => :comments, :order => 'comments.created_at DESC')
在照片/节目视图中
=render :partial => "/comments/partials/comment", :collection => @photo.comments, :as => :comment
它显示 cmets,例如。评论文本很好,但在部分内容中我尝试这样做:
%p=comment.user.fname
%p=comment.body
它抛出错误“undefined method `fname' for nil:NilClass”
奇怪的是,我是 authlogic 用户,所以您必须登录才能发表评论。但是即使您没有登录,您也可以看到 cmets。当我注销时,它可以找到。当我登录时它会引发错误。
任何帮助将不胜感激,因为它让我发疯。
顺便说一下我的路线
map.resources :users, :has_many => [:photos, :comments]
map.resources :photos, :has_many => [:comments, :users]
谢谢
【问题讨论】:
-
验证
user_id在Comment模型中的值。在script/console打印user_id的值(即` photo.cmets.each { |c| p c.user_id }`)。如果任何值为nil,那么您的 cmets 创建逻辑中一定有错误。 -
感谢所有 cmets 都有 user_id。 Create 方法中的所有 cmets 都将 current_user.id 作为 user_id,因为我使用的是 authlogic,您必须登录才能添加评论。
-
奇怪的是,如果我尝试做comment.photo.id,它发现它很好,我可以得到评论所属的照片。当我做 comment.user.id 虽然它返回 nil 但只有当用户登录时才返回。
标签: ruby-on-rails associations polymorphic-associations