Activerecord HAS_MANY关系预防孤儿新创建的对象
-
08-10-2019 - |
题
假设我有一个属于邮政模型的评论模型。
我想做到这一点,以创建新的评论实例(无论是新的,创建,find_or_create_by_x等),除非立即设置帖子(通过将其传递给参数或通过在创建评论时,请始终引用帖子,例如post.comments.new或post.comments.create)。
我想这样做,因为我想在评论对象中设置一些基于帖子的默认值...因此,帖子参考需要立即有效。
完成此操作的最佳方法是什么?谢谢。
解决方案
我认为为此可以使用 new
你必须在 after_initialize
:
def after_initialize
raise "no Post" unless post
end
不过,似乎过分杀伤力,因为每当发表评论就必须进行实例化。我会说编写测试,以确保适当设置默认值。
其他提示
我会在您的评论模型中添加验证:
class Comment < ActiveRecord::Base
validates_presence_of :post_id
end
然后使用:
@post = Post.find(params[:post_id])
@post.comments.create(params[:comment])
不隶属于 StackOverflow