Rails照片,用户,评论

时间:2010-03-02 09:17:17

标签: ruby-on-rails associations polymorphic-associations

这让我发疯了。我有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抛出错误“未定义的方法`fname':NilClass”

奇怪的是我是用户authlogic所以你必须登录才能发表评论。但即使您没有登录,也可以看到评论。当我退出时,它可以找到。当我登录时抛出错误。

任何帮助都会非常感激,因为它让我疯狂。

顺便说一句,我的路线

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

由于

2 个答案:

答案 0 :(得分:0)

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

belongs_to :photo
belongs_to :user

答案 1 :(得分:0)

+1使用haml

我可以想到为什么会发生这种情况的几个原因

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

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

然后错误会转移到下一个变量(即comment.body)

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

另外,您是否为模型中的fname变量设置了attr_accessible? chekc你为所有变量设置了这个。

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

我意识到你想要让它工作但是如果你不能,那么使用disqus.com插件并不羞耻 - 它可以节省数据库空间,有助于吸引更多评论,因为很多人已经有了配置文件并给出了你有一些漂亮的版主特征...在缺点,你失去了品牌,你不能使用任何自己的rjs效果..

祝你好运