私は、kersを受け入れた_nested_attributes_forの教師モデルを持っています。 klassにユーザーがいて、検証メッセージを出力したい場合、klassを削除できないようにしたい。rails 3 - 破壊検証の前にネストされた属性を受け入れる。
これは=私がaccepts_nested_attributes_forを使用し、「klasses_attributes」に渡していたときにユーザーが含まれている先生からのklassを削除しようとしたとき、私は検証が失敗したい...私が持っているもの
class Teacher < ActiveRecord::Base
accepts_nested_attributes_for :klasses, :reject_if => proc { |a| a['name'].blank? }, :allow_destroy => true
end
class Klass < ActiveRecord::Base
belongs_to :teacher
has_many :users
before_destroy :reject_if_has_users
private
def reject_if_has_users
if users.length > 0
errors.add_to_base "You cannot delete this class as it contains users."
false
else
true
end
end
end
です> {"0" => {"name" => "test"、 "_destroy" => "1"、 "id" => "17183"}ハッシュ
上記の方法では、error.add_to_base行がない場合、クラスが削除されません。ただし、検証メッセージは表示されません。私はその行を持っているとき、削除を妨げません。レコードを保存する場合にのみ、レコードを削除するとき
おかげで、
ティム
私は私が削除されます削除klassesのハッシュを含むことができ、教師の記録を保存しています、destroyメソッドを呼び出していないです魔法のようにaccepts_nested_attributes_forによって。例えば。 "klasses_attributes" => {"0" => {"name" => "テスト"、 "_destroy" => "1"、 "id" => "17183"} – Tim
申し訳ありません、十分に質問してください。私は私の答えを書き換えます... – Mischa
私は私の答えを更新しましたが、あまりきれいではありません。コードにいくつかのコメントを追加して、何が起こっているのかを明確にする必要があります。私はもっと良い解決方法を見たいと思っています。がんばろう。 – Mischa