Swa*_*y g 9 activerecord ruby-on-rails
我有一个Project模型,它接受任务的嵌套属性.而Task有一个虚拟属性"name".因此,每次更改名称时,它都会在更新前保持为encrypted_task_name.在项目编辑页面上,表单具有任务名称的输入字段(而不是encrypted_task_name).当我更改名称并且因为name是虚拟属性时,Rails不检测Task中的更改,并且在更新Project时不会更新该任务.
即使在项目更新期间更改了虚拟属性,如何确保保存任务?
我不想使用的一个选项是:task.rb上的autosave => true,因为我的任务很少更新.
Dav*_*est 26
我遇到了同样的问题.使用:autosave => true
甚至没有为我工作.我设法通过添加attribute_will_change!(:my_virtual_attribute)
到我的虚拟属性的编写器来解决它.所以,在你的情况下:
class Task < ActiveRecord::Base
..
def name=(the_name)
attribute_will_change!(:name)
..
end
..
end
Run Code Online (Sandbox Code Playgroud)
这会将对象标记为未更改或脏,并使update_attributes正确保存嵌套模型.
链接:
http://apidock.com/rails/ActiveRecord/Dirty/attribute_will_change%21 http://ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects
归档时间: |
|
查看次数: |
2571 次 |
最近记录: |