使用多个虚拟属性表单输入来更新单个模型属性
use multiple virtual attribute form inputs to update a single model attribute
我的模型中有以下虚拟属性:
attr_accessor :city, :zip, :street, :suite
在 new/edit 表单中,我为每个属性设置了表单域。我可以使用我们将调用的方法 address_lookup 将这四个属性转换为单个 address_id。我只需要将 address_id 存储在模型中。在 create/update 控制器操作和(如有必要)模型中干净地处理此问题的基本方法是什么?这有点让我头疼。
最简单的是添加一个 before_save
回调,我们将使用 the changed
array 在我们进行查找之前检查我们感兴趣的任何属性是否已更改:
before_save :set_address
def set_address
if address = Address.find_or_create_by( city: city, zip: zip, street: street, suite: suite)
self.address = address
end
end
我的模型中有以下虚拟属性:
attr_accessor :city, :zip, :street, :suite
在 new/edit 表单中,我为每个属性设置了表单域。我可以使用我们将调用的方法 address_lookup 将这四个属性转换为单个 address_id。我只需要将 address_id 存储在模型中。在 create/update 控制器操作和(如有必要)模型中干净地处理此问题的基本方法是什么?这有点让我头疼。
最简单的是添加一个 before_save
回调,我们将使用 the changed
array 在我们进行查找之前检查我们感兴趣的任何属性是否已更改:
before_save :set_address
def set_address
if address = Address.find_or_create_by( city: city, zip: zip, street: street, suite: suite)
self.address = address
end
end