假设我有一个属于邮政模型的评论模型。

我想做到这一点,以创建新的评论实例(无论是新的,创建,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])
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top