加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 3嵌套属性:如何将匹配记录分配给父模型

发布时间:2020-12-17 01:59:42 所属栏目:百科 来源:网络整理
导读:这是基本设置: 我有一个订单模型.订单有一个地址,并且accept_nested_attributes_for:地址. 我有一个基本的订单表格,我要求用户输入她的地址.这是用nested_fields_for处理的.一切都很好 – 新地址经过验证并分配得很好. 但是,问题在于它每次都会创建一个新
这是基本设置:

我有一个订单模型.订单有一个地址,并且accept_nested_attributes_for:地址.

我有一个基本的订单表格,我要求用户输入她的地址.这是用nested_fields_for处理的.一切都很好 – 新地址经过验证并分配得很好.

但是,问题在于它每次都会创建一个新地址,即使已存在具有相同属性的地址也是如此.

我想修改行为,以便如果用户输入的地址与现有地址的所有属性匹配,则该顺序将现有地址分配给自己而不是创建新地址.

我尝试过的方法是:

>在控制器中,尝试使用嵌套属性(params [:order] [:address_attributes])查找现有的Address记录.如果存在匹配项,请删除所有嵌套属性并将其替换为params [:order] [:address_id].
>根本不要使用nested_attributes_for,而是覆盖模型中的address =方法,然后使用控制器根据参数创建新地址,然后将其移交给模型.

这两种解决方案似乎都有各种程度的混乱.有人可以告诉我这是一个控制器或模型的责任,也许可以提出一个优雅的方法来实现这一目标吗?

提前致谢.

解决方法

你尝试过这样的事吗?

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读