ruby-on-rails – Rails 3嵌套属性:如何将匹配记录分配给父模型
这是基本设置:
我有一个订单模型.订单有一个地址,并且accept_nested_attributes_for:地址. 我有一个基本的订单表格,我要求用户输入她的地址.这是用nested_fields_for处理的.一切都很好 – 新地址经过验证并分配得很好. 但是,问题在于它每次都会创建一个新地址,即使已存在具有相同属性的地址也是如此. 我想修改行为,以便如果用户输入的地址与现有地址的所有属性匹配,则该顺序将现有地址分配给自己而不是创建新地址. 我尝试过的方法是: >在控制器中,尝试使用嵌套属性(params [:order] [:address_attributes])查找现有的Address记录.如果存在匹配项,请删除所有嵌套属性并将其替换为params [:order] [:address_id]. 这两种解决方案似乎都有各种程度的混乱.有人可以告诉我这是一个控制器或模型的责任,也许可以提出一个优雅的方法来实现这一目标吗? 提前致谢. 解决方法
你尝试过这样的事吗?
class Order < ActiveRecord::Base # [..] before_save :replace_existing_address! def replace_existing_address! db_address = Address.where(:city => self.address.city,:street => self.address.street,:number => self.address.number).first self.address = db_address if db_address end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |