関連の関連の関連の関連のvalidation
Hostのhas_one のEstate のhas_manyのRooms のhas_manyのPricesという構造が(多数組)あります。
host.valid? としたら pricesのvalidationもできるようにしたい。
(かつ、hostの状態によってvalidationの項目が変わる)
validates_associated :estate
という記述を各々にすればvaliationが伝搬していくのは知っていますが、それですと 例えばpriceにだけ問題があったとき、「:"estate.rooms.prices"=>["は不正な値です"]」というmessagesが帰ってきます。これは問題が二つあります。
- priceのどれがわるいのか、がわかりません。
- 「:"estate.rooms.prices"=>["は不正な値です"]」がI18n.t してもらえません。「"Estate rooms pricesは不正な値です"」
1)の対策としてvalidates_associated は使わず前の質問で解決作成した is_valid?(validate_type)を使い、
def is_valid_progeny?(validate_type=nil) @validate_type = validate_type is_valid?(validate_type) rooms.each{|room| room.is_valid_progeny?(validate_type) errors.messages.merge!(estate.errors.messages.transform{|k| "room.#{k}"}) } end
と各modelにしてみました。
priceまでの詳細がとれたのですが当然のことながら
:"estate.room.price.amount"=>:"estate.rooms.prices"=>["を入力してください"]
となり、問題2)がのこりました。
2)のために
js.ymlの
ja: activerecord: attributes: host:
の下に
estate.rooms.prices: 料金 estate: rooms: prices: 料金 estate.room.price.amount: 料金 estate: room: price: amount: 料金
などを作ってみましたがだめでした。
このように深い階層の関連のvalidationを扱うのはどのようにしたら良いのでしょうか
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。