【发布时间】:2016-01-27 16:18:31
【问题描述】:
给定
class Post
has_many :comments
end
class Comment
belongs_to :post
end
如果我想验证评论总是有帖子,我应该使用
class Comment
belongs_to :post
validates :post, presence: true
end
或
class Comment
belongs_to :post
validates :post_id, presence: true
end
?
Rails guides 建议使用 validates :post, presence: true 方法,表示:
如果您想确保存在关联,您需要 测试关联对象本身是否存在,而不是 用于映射关联的外键。
我可以看到两者之间的一个区别是,如果你这样做了
post = Post.new
comment = Comment.new
comment.post = post
comment.save
如果基于post_id,则验证失败,但如果基于post,则验证成功。后者对我来说更有意义。
但是,我有时会在现实生活中看到人们使用post_id 方法。他们只是使用了“错误”的方法,还是有我不知道的理由?
Rails Style Guide 没有与此主题相关的任何内容。
Rails ActiveRecord:: Proper way for validating presence on associations? 的问题似乎是在询问如何使用post_id 方法让项目工作,但似乎没有解释为什么要使用这种方法。
Rails 4: Difference between validates presence on id or association 是关于验证的,但只是描述了两种方法的不同效果,而不是说明为什么应该使用post_id。
Rails - Validate Presence Of Association? 的问题无关紧要 - 它是在讨论验证帖子是否至少包含一条评论,这与我所问的要求不同。
【问题讨论】:
标签: ruby-on-rails validation rails-activerecord