2
我有一個嵌套屬性的Rails表單。用戶可以更新其caddy
有2種方式:刪除具有嵌套屬性的驗證
- 通過書面形式提供的地址到模型
Address
的嵌套屬性, - 或通過選擇複選框,意思是「我不想交付」
它生成一組則params的是這樣的:
{
"id"=>"mine",
"caddy"=> {
"address_attributes"=>{"street"=>"", "city"=>"" [...]},
"use_address"=>"1"
}
}
我的模型的某些部分:
Model Caddy < AR::Base
belongs_to :address
accepts_nested_attributes_for :address
attr_accessor :use_address
end
Model Address < AR::Base
validates :street, :presence => true
end
的問題是,當用戶檢查use_address
複選框,則address_attributes
不應該被使用,但它們是,提高從street
存在驗證錯誤。
我試過這個方法添加到Caddy
覆蓋由attr_accessor
產生use_addresss=
:
def use_address=(v)
if v == '1'
self.address_id = nil
self.address_attributes = {}
self.address = nil
end
super
end
但它改變不了什麼(address_attributes
應該nil
然後是哈希PARAMS)。
我發現的唯一解決方案是直接將參數更改爲我的控制器,但它很糟糕。你有其他解決方案嗎?
不錯的辦法! – pierallard