1

小さな問題が 1 つあります。解決できません。関連付けられたモデルが少なくとも 1 つあることを検証したいと考えています。以下のように

class User < ActiveRecord::Base
has_many :things
validates_presence_of :things
end

class Thing < ActiveRecord::Base
belongs_to :user
end

を介してモデルを更新するとうまくいきます#update_attributesが、単純に を設定@user.things = []すると、データベースで無効なデータを取得できます。これを解決するための私の回避策は、セッターメソッドを上書きすることです

def things=(val)
  begin
    if val.blank?
      errors.add(:things, "not valid")
      raise SomeError
    end
    super
  rescue SomeError
    false
  end
end

しかし、どういうわけかこれは正しく感じられません。検証および/またはコールバックを介して同じ結果をアーカイブする方法はあり#things=ませvalんか@user.things?@user.things@user.things(true)

4

1 に答える 1

0

物の存在をチェックするカスタムバリデーターを作成できます。

それ以外の

validates_presence_of :things

あなたができる

validate :user_has_things

def user_has_things
 if self.things.size == 0
  errors.add("user has no thingies")
 end
end
于 2013-02-25T16:55:29.230 に答える