1

我有一个嵌套资源,与您在博客上找到的“帖子”/“评论”关系没有什么不同。

在帖子的#show 事件中,我显示了一个新评论表单,其下方是该帖子的所有先前评论。

我在控制器中的 #show 方法如下所示:

def show
    @post = Post.find(params[:id])
    @comment = @post.comments.build

现在,问题在于我的@page.comments 集合中有一个空的、未保存的实体。因此,当我列出评论并做类似的事情时,在我看来。

<%= comment.created_at.strftime("%a, %d %b %Y %H:%M:%S") %>

我抛出异常:

undefined method `strftime' for nil:NilClass

我试图通过切换我的#show 控制器来纠正这个问题,这样它就不会通过 post 对象限定新评论的范围,但是如果我被重定向回带有验证错误的表单,我仍然会遇到同样的问题。

任何人都可以提供一些建议吗?

4

1 回答 1

0

我也有同样的问题。似乎没有一种合法的方式来通过集合构建子对象而不实际将其添加到集合中。

所以而不是:

@post = Post.find(params[:id])
@comment = @post.comments.build

我愿意:

@post = Post.find(params[:id])
@comment = Comment.new(:post => @post)

它以相同的方式构建子对象,但不会将其添加到父集合中,因此您的列表构建时不会出错。这不是我想要的方式,但它似乎是通过对工作流程进行最少更改来完成相同事情的最佳方式。

于 2013-03-31T20:52:37.420 回答