假设我有一个属于Post模型的Comment模型。
我想这样做,以便创建一个新的Comment实例(无论是new,create,find_or_create_by_x等)都会失败(最好引发异常),除非立即设置Post(通过将其作为参数或在创建评论时始终引用帖子,例如post.comments.new或post.comments.create)。
我想这样做,因为我想在评论对象中设置一些基于帖子的默认值...所以帖子引用需要立即有效。
实现这一目标的最佳方法是什么?感谢。
答案 0 :(得分:0)
我认为为了使其与new
一起使用,您必须在after_initialize
中执行此操作:
def after_initialize
raise "no Post" unless post
end
虽然看起来像矫枉过正,因为每次评论实例化时都必须运行。我会说写测试可以确保正确设置默认值。
答案 1 :(得分:0)
我会在你的评论模型中添加验证,如下所示:
class Comment < ActiveRecord::Base
validates_presence_of :post_id
end
然后使用以下方法创建新评论:
@post = Post.find(params[:post_id])
@post.comments.create(params[:comment])