使用多个虚拟属性表单输入来更新单个模型属性

时间:2015-02-09 20:38:55

标签: ruby-on-rails forms virtual-attribute

我的模型中有以下虚拟属性:

attr_accessor :city, :zip, :street, :suite

在新/编辑表单中,我有每个属性的表单字段。我可以使用我们调用address_lookup的方法将这四个属性转换为单个address_id。我只需要在模型中存储address_id。在创建/更新控制器操作中以及(如果需要)模型中干净地处理此问题的基本方法是什么?这有点过头了。

1 个答案:

答案 0 :(得分:1)

最简单的是添加before_save回调,我们会使用the changed array检查我们感兴趣的任何属性是否在我们查找之前发生了变化:< / p>

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