rails勉強中です。的はずれな質問かもしれませんがご容赦ください。(質問以外におかしなところがあったらバンバンご指摘ください)
いま、Userモデル、ブログ投稿を表すPostモデル、そのブログ投稿に対するコメントを表すCommentモデルがあるとします。これら3つのモデルの関係は以下のようになっているとします。
Ruby
1class Post < ActiveRecord::Base 2 belongs_to :user 3 has_many :comments 4end 5 6class Comment < ActiveRecord::Base 7 belongs_to :user 8 belongs_to :post 9end 10 11class User < ActiveRecord::Base 12 has_many :posts 13 has_many :comments 14end
以上の関係を前提として、あるブログ投稿(post.id=3とします)に対して、コメントを新規作成する状況を考えます。フォームから送られてくるパラメータは、
- 関連付くpostのid (=3)
- コメントの本文
を想定しています。post_idはフォームのhiddenフィールドに「3」を入れておきます。 しかし、Postリクエストではパラメータは常に改竄されている可能性をはらんでいるので、必ずしもpost_idが「3」で送られてくるわけではないことに注意しなければなりません。具体的には、以下の3つを検証すべきかと考えています。
- パラメータにpost_idが存在すること
- post_idが整数型であること
- post_idを主キーにもつレコードがDBに存在すること
最初の2つはそれぞれ、
Ruby
1validates :post_id, presence: true # 値の存在性 2validates :post_id, numericality: { only_integer: true } # 整数のみ有効
で良いと考えています。
問題は3つ目です。
DBに存在していることを、どのように検証すれば良いのでしょうか。よろしくお願い致します。
※追記
もしかしてこんな風にすれば良いのかな。。
http://stackoverflow.com/questions/12451288/how-to-validate-associated-model-id
あなたの回答
tips
プレビュー