次の単純化されたモデルを検討してください
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
テストを書こうとしている以外は、レールキャストのタグ付けにほぼ従っています。
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
ているようです。まだ利用できないためです。
人々は通常ここで何をしますか? テーブルを結合するためにそのような検証を追加するのは慣例ですか、それともスキップできますか?