0

假设我有一个属于 Post 模型的 Comment 模型。

我想让它创建一个新的 Comment 实例(无论是通过 new、create、find_or_create_by_x 等)将失败(最好引发异常),除非立即设置 Post(通过将其作为参数传递或通过创建评论时始终引用该帖子,例如 post.comments.new 或 post.comments.create)。

我想这样做是因为我想在评论对象中设置一些基于帖子的默认值......所以帖子引用需要立即有效。

实现这一目标的最佳方法是什么?谢谢。

4

2 回答 2

0

我认为为了让它与你一起工作,new你必须这样做after_initialize

def after_initialize
  raise "no Post" unless post
end

不过,这似乎有点矫枉过正,因为每次实例化评论时都必须运行它。我会说编写测试以确保正确设置默认值。

于 2010-10-17T07:27:20.197 回答
0

我会在您的评论模型中添加一个验证,如下所示:

class Comment < ActiveRecord::Base
  validates_presence_of :post_id
end

然后使用以下命令创建新评论:

@post = Post.find(params[:post_id])

@post.comments.create(params[:comment])
于 2010-10-17T20:51:15.273 回答