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,所以您必须登录才能发表评论。但是即使您没有登录,您也可以看到评论。当我注销时,它可以找到。当我登录时,它会引发错误。

任何帮助将不胜感激,因为它让我发疯。

顺便说一句,在我的路线中,我有

map.resources :users, :has_many => [:photos, :comments]
map.resources :photos, :has_many => [:comments, :users]

谢谢

4

2 回答 2

0

不确定这会有所不同,但是您是否尝试过分离 belongs_to 关联?

belongs_to :photo
belongs_to :user
于 2010-03-02T19:10:34.833 回答
0

+1 使用haml

我能想到可能发生这种情况的几个原因

首先,当您从代码中删除以下行时会发生什么?

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

然后错误是否移动到下一个变量(即comment.body)

如果不是,那么您至少已将其范围缩小到 fname 变量。在这种情况下,我想知道您是否可能在创建一些初始数据库条目后将 fname 变量添加到模型中......这意味着某些 hte 条目没有关联的 fname 变量。在这种情况下,您可以通过清理数据库并从头开始重新迁移来解决问题

此外,您是否为模型中的 fname 变量设置了 attr_accessible ?检查您是否为所有变量设置了此设置。

您可以查看您的数据库并确保所有条目都设置了 fname 变量吗?

我知道你想让这个工作,但如果你做不到,使用 disqus.com 插件并不丢人 - 它可以节省你的数据库空间,有助于吸引更多评论,因为很多人已经有了个人资料,并给你一些漂亮版主功能...不利的一面是,您会失去品牌知名度,并且您不能使用任何自己的 rjs 效果..

祝你好运

于 2010-03-02T22:37:22.997 回答