In my application I have models Post
& Image
. My association are:
class Post < ActiveRecord::Base
has_many :images
accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true
class Image < ActiveRecord::Base
belongs_to :post
I use cocoon gem
for nested_forms
When user is adding images, I have some global settings that user can apply to images they are adding.
I do it by doing:
class Post < ActiveRecord::Base
has_many :images
accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true
after_create :global_settings
private
def global_settings
self.images.each { |image| image.update_attributes(
to_what: self.to_what,
added_to: self.added_to,
)
}
end
This works fine, but now I want it so if they want to edit
post's images
, I want to apply same post global settings ONLY to new records.
I tried to do it by doing:
class Post < ActiveRecord::Base
has_many :images
accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true
after_save :global_settings
private
def global_settings
if new_record?
self.images.each { |image| image.update_attributes(
to_what: self.to_what,
added_to: self.added_to,
)
}
end
end
This didn't worked at all & global setting were not added to any record (nor on new/create
or edit/update
action).
I've also tried with:
after_save :global_settings, if: new_record?
This gave me error: undefined method 'new_record?' for Post
How can I only apply my global settings for all new records/new images?
ps: I tried to find some answer on SO, but nothing worked!
Since
images
doesn't have those global settings means that you can only execute thefunction
only onimages
that doesn't have allfields
.