Last active
August 29, 2015 14:19
-
-
Save xarimanx/dea2f5e8478b543aa336 to your computer and use it in GitHub Desktop.
virtual attributes in nested attributes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Accepts Nested Attribute with a virtual attribute | |
I have a Project model which accepts nested attributes for tasks. And Task has a virtual attribute "name". So every time I change the name, it gets persisted as encrypted_task_name before update. On the project edit page the form has a input field for task name (and not encrypted_task_name). When I change the name and since name is a virtual attribute, Rails doesn't detect a change in Task and doesn't update that task while updating Project. | |
How do I make sure that task is saved even if its virtual attributes are changed during Project update? | |
One option that I don't want to use is :autosave => true on task.rb since I task is rarely updated. | |
--------- | |
I ran into the same problem. Using :autosave => true didn't even work for me. I managed to solve it by adding attribute_will_change!(:my_virtual_attribute) to the writer for my virtual attribute. So, in your case: | |
class Task < ActiveRecord::Base | |
.. | |
def name=(the_name) | |
attribute_will_change!(:name) | |
.. | |
end | |
.. | |
end | |
This marks the object as unchanged or dirty, and that makes update_attributes save the nested model correctly. | |
Links: | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment