考慮下面的簡化模型我應該驗證連接表中的外鍵嗎?
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