validatesで:uniquenessを使う場合に注意するべきこと

Railsのmodelの検証で、

class Sample < ActiveRecord::Base
  belongs_to :hoge
  belongs_to :fuga
  attr_accessible :hoge, :fuga
  validates :hoge, :presence => true,
  validates :fuga, :presence => true, :uniqueness => {:scope => [:hoge]}
end

でRSpecのテストを通したところ、
undefined method `text?’ for nil:NilClass
というエラーが発生してしまった。

なんでやねん、と思っていたら、他のテストのところで、
PG::Error: ERROR: column samples.fuga does not exist
と言われていた。
どうも:uniquenessを指定する場合は、validatesで指定するのはカラム名でないといけないようだ。

validates の:fugaを:fuga_id,:uniquenessのところも:hoge_idに修正したところ、テストが通った。

class Sample < ActiveRecord::Base
  belongs_to :hoge
  belongs_to :fuga
  attr_accessible :hoge, :fuga
  validates :hoge, :presence => true,
  validates :fuga_id, :presence => true, :uniqueness => {:scope => [:hoge_id]}
end

割と悩んでしまった。


タグ Ruby, Ruby on Rails | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です