嵌套属性在使用cocoon保存之前更改值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌套属性在使用cocoon保存之前更改值相关的知识,希望对你有一定的参考价值。
我有一个项目模型:
class Project < ApplicationRecord
has_many :site_visits, inverse_of: :project, dependent: :destroy
accepts_nested_attributes_for :site_visits, allow_destroy: true, reject_if: :all_blank
before_save: :convert_site_visit_dates
def convert_site_visit_dates
begin
if self.site_visits_attributes.present?
self.site_visits_attributes.each do |site_visit|
site_visit[1]['visit_date'] = convert_date(site_visit[1]['visit_date']) if site_visit[1]['visit_date'].present?
site_visit[1]['_destroy'] = true if site_visit[1]['_destroy'] == "1"
end
end
rescue StandardError
nil
end
end
end
我有site_visit模型:(列 - visit_date
)
class SiteVisit < ApplicationRecord
belongs_to :project
end
在通过cocoon gem在任何特定项目中保存site_visits之前,我需要使用回调更改site_visits_attributes
的值。在我的项目模型中,您可以看到我已经定义了一个回调来更改visit_date
表的site_visit
列。但价值并没有改变。因此,在数据库中保存了空值。
知道什么是错的吗?
答案
site_visits_attributes
不是Project对象的方法。如果你删除rescue StandardError
,你会发现这个问题。
修改控制器中before_filter
中的数据可能是个更好的主意。或者,您可以修改SiteVisit对象上before_save
上的数据。
以上是关于嵌套属性在使用cocoon保存之前更改值的主要内容,如果未能解决你的问题,请参考以下文章
使用 COCOON Rails 3 在动态字段中自动完成 Jquery
使用 Cocoon 在 link_to_add_association 点击时自动添加嵌套的子部分
在 Ruby on Rails 4.2 中使用 Cocoon gem 嵌套表单