嵌套属性在使用 cocoon 保存之前更改值
nested attributes change value before save with 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
的值.在我的项目模型中,您可以看到我定义了一个回调来更改 site_visit
table 的 visit_date
列。但价值没有改变。因此,在数据库中保存了空值。
知道哪里出了问题吗?
site_visits_attributes
不是 Project 对象的方法。如果你删除 rescue StandardError
你就会遇到这个问题。
最好在控制器中修改 before_filter
中的数据。或者,您可以修改 SiteVisit 对象上 before_save
上的数据。
我有一个项目模型:
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
的值.在我的项目模型中,您可以看到我定义了一个回调来更改 site_visit
table 的 visit_date
列。但价值没有改变。因此,在数据库中保存了空值。
知道哪里出了问题吗?
site_visits_attributes
不是 Project 对象的方法。如果你删除 rescue StandardError
你就会遇到这个问题。
最好在控制器中修改 before_filter
中的数据。或者,您可以修改 SiteVisit 对象上 before_save
上的数据。