考虑下面的简化模型我应该验证连接表中的外键吗?
class Article < ActiveRecord::Base
has_many :taggings
has_many :tags, through: :taggings
end
class Tag < ActiveRecord::Base
has_many :taggings
has_many :articles, through: :taggings
end
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :article
validates :tag_id, :article_id, presence: true
end
我几乎跟着tagging railscast除了我试图写的测试它。
标签模型中的验证不在railscast中使用,但是我自己添加了这个验证,这让我很头疼。
如果我创建一个新的文章中,我可以通过标签列表:
a = Article.new(title: "title", tag_list: "tag 1, tag 2")
a.valid?
#=> false
a.errors
# =>
@base=#<Article id: nil, title: "title">,
@messages={:taggings=>["is invalid", "is invalid"]}>
因此,它看起来像我的标签类的验证是造成第二十创建失败,因为article_id
是尚未公布。
人们通常在这里做什么?习惯上添加这样的验证来连接表还是可以跳过?
您打算如何验证这些限制?你在哪种情况下期望失败?请花点时间思考并尝试自己回答;-) 提示:如果发生以下情况,会发生什么情况:tag_id或:article_id不在那里? – awenkhh
那么,如果他们不在那里,标签就不会出现在屏幕上,真的没什么大不了的。我想应该没问题了。 – stephenmurdoch
所以你去;-)。我会建议删除它们,因为它们不会给你的应用程序带来任何稳定性;-) – awenkhh