Rails 照片、用户、评论
Posted
技术标签:
【中文标题】Rails 照片、用户、评论【英文标题】:Rails Photos, Users, Comments 【发布时间】: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 但只有当用户登录时才返回。
【参考方案1】:
不确定这会有所不同,但您是否尝试过分离 belongs_to 关联?
belongs_to :photo
belongs_to :user
【讨论】:
谢谢,这绝对不是问题【参考方案2】:+1 用于使用haml
我能想到可能发生这种情况的几个原因
首先,当您从代码中删除以下行时会发生什么?
# try removing this
%p=comment.user.fname
错误是否会转移到下一个变量(即comment.body)
如果不是,那么您至少已将范围缩小到 fname 变量。在这种情况下,我想知道您是否可能在创建一些初始数据库条目后将 fname 变量添加到模型中......这意味着某些 hte 条目没有关联的 fname 变量。在这种情况下,您可以通过清理数据库并从头开始重新迁移来解决问题
另外,您是否为模型中的 fname 变量设置了 attr_accessible?检查您是否为所有变量设置了此设置。
您能否查看您的数据库并确保所有条目都设置了 fname 变量?
我知道你想让这个工作,但如果你做不到,使用 disqus.com 插件并不丢人 - 它可以节省你的数据库空间,有助于吸引更多的 cmets,因为很多人已经有了个人资料并提供你有一些漂亮的主持人功能......在不利方面,你会失去品牌,你不能使用任何你自己的 rjs 效果..
祝你好运
【讨论】:
您好,感谢您的回答当我尝试从评论中检索用户时,问题就来了。当我从评论中调用照片时,它可以工作。数据库很干净,没有记录并且问题存在,但仅在我登录时才存在。我认为 authlogic 和我的模型之间存在某种混淆。以上是关于Rails 照片、用户、评论的主要内容,如果未能解决你的问题,请参考以下文章