嵌套属性在使用cocoon保存之前更改值

问题描述 投票:0回答:1

我有一个项目模型:

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列。但价值并没有改变。因此,在数据库中保存了空值。

知道什么是错的吗?

ruby-on-rails ruby callback nested-attributes cocoon-gem
1个回答
1
投票

site_visits_attributes不是Project对象的方法。如果你删除rescue StandardError,你会发现这个问题。

修改控制器中before_filter中的数据可能是个更好的主意。或者,您可以修改SiteVisit对象上before_save上的数据。

© www.soinside.com 2019 - 2024. All rights reserved.