gpt4 book ai didi

ruby-on-rails - Rails 3 嵌套属性 : How can I assign a matching record to the parent model instead of creating a new record every time?

转载 作者:行者123 更新时间:2023-12-04 07:35:39 24 4
gpt4 key购买 nike

这是基本设置:

我有一个 Order模型。安 Order有一个 Addressaccepts_nested_attributes_for :address .

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

然而,问题在于它创建了一个新的 Address每次 ,即使是 Address已经存在,具有相同的属性。

我想修改行为,以便如果用户输入的地址与现有 Address 的所有属性匹配, 订单分配现有 Address给自己而不是创造一个新的。

我尝试过的方法是:

  • 在 Controller 中,尝试查找具有嵌套属性 ( params[:order][:address_attributes] ) 的现有地址记录。如果存在匹配项,则删除所有嵌套属性并将其替换为 params[:order][:address_id] .
  • 不要使用 nested_attributes_for在所有,而是覆盖 address=模型中的方法,然后只需使用 Controller 创建一个新的Address基于参数,然后将其交给模型。

  • 这两种解决方案似乎都有不同程度的困惑。有人可以请教我这是 Controller 还是模型责任,并提出一种优雅的方法来实现这一点?

    提前致谢。

    最佳答案

    你有没有尝试过这样的事情?

    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

    关于ruby-on-rails - Rails 3 嵌套属性 : How can I assign a matching record to the parent model instead of creating a new record every time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720035/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com