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_idComment模型中的值。在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 照片、用户、评论的主要内容,如果未能解决你的问题,请参考以下文章

向 Rails 中的用户发送评论通知?

Rails 4,ActiveRecord,查找当前用户未评论的所有帖子

微博在用户页面上的评论(Ruby on Rails)

Rails 3 - 评论/消息 - “\n\r”

Rails Duplex 评论

如何在 Rails 应用程序中集成 facebook 评论?