Ruby on Rails - 运行 after_save 只有新记录
Ruby on Rails - Run after_save only if new records
在我的应用程序中,我有模型 Post
和 Image
。我的协会是:
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
我用cocoon gem
代替nested_forms
当用户添加图像时,我有一些全局设置,用户可以将其应用于他们正在添加的图像。
我是这样做的:
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
这很好用,但现在我想要它,所以如果他们想要 edit
post's images
,我想应用相同的 post 全局设置 仅到新记录。
我试着这样做:
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
这根本不起作用&全局设置没有添加到任何记录(也没有添加到new/create
或edit/update
动作).
我也尝试过:
after_save :global_settings, if: new_record?
这给了我错误:undefined method 'new_record?' for Post
如何才能只对所有 新 records/new 图片应用我的 全局 设置?
ps:我试图在 SO 上找到一些答案,但没有任何效果!
这可能对你有用。
def global_settings
# if new_record? # Change this to
if self.new_record?
self.images.each { |image| image.update_attributes(
to_what: self.to_what,
added_to: self.added_to,
)
}
end
因为 images
没有那些 全局设置 意味着你只能在没有的 images
上执行 function
没有全部 fields
.
def global_settings
self.images.each { |image|
if image.to_what.blank?
image.update_attributes(
to_what: self.to_what,
added_to: self.added_to
)
end
}
end
在我的应用程序中,我有模型 Post
和 Image
。我的协会是:
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
我用cocoon gem
代替nested_forms
当用户添加图像时,我有一些全局设置,用户可以将其应用于他们正在添加的图像。
我是这样做的:
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
这很好用,但现在我想要它,所以如果他们想要 edit
post's images
,我想应用相同的 post 全局设置 仅到新记录。
我试着这样做:
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
这根本不起作用&全局设置没有添加到任何记录(也没有添加到new/create
或edit/update
动作).
我也尝试过:
after_save :global_settings, if: new_record?
这给了我错误:undefined method 'new_record?' for Post
如何才能只对所有 新 records/new 图片应用我的 全局 设置?
ps:我试图在 SO 上找到一些答案,但没有任何效果!
这可能对你有用。
def global_settings
# if new_record? # Change this to
if self.new_record?
self.images.each { |image| image.update_attributes(
to_what: self.to_what,
added_to: self.added_to,
)
}
end
因为 images
没有那些 全局设置 意味着你只能在没有的 images
上执行 function
没有全部 fields
.
def global_settings
self.images.each { |image|
if image.to_what.blank?
image.update_attributes(
to_what: self.to_what,
added_to: self.added_to
)
end
}
end