作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是基本设置:
我有一个 Order
模型。安 Order
有一个 Address
它accepts_nested_attributes_for :address
.
我有一个基本的订单表格,我要求用户输入她的地址。这由 nested_fields_for
处理.一切正常 - 新地址经过验证并很好地分配。
然而,问题在于它创建了一个新的 Address
每次 ,即使是 Address
已经存在,具有相同的属性。
我想修改行为,以便如果用户输入的地址与现有 Address
的所有属性匹配, 订单分配现有 Address
给自己而不是创造一个新的。
我尝试过的方法是:
params[:order][:address_attributes]
) 的现有地址记录。如果存在匹配项,则删除所有嵌套属性并将其替换为 params[:order][:address_id]
. nested_attributes_for
在所有,而是覆盖 address=
模型中的方法,然后只需使用 Controller 创建一个新的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
关于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/
我是一名优秀的程序员,十分优秀!