Ruby on rails Rails 4有许多嵌套的属性来替换所有属性
我想使用嵌套的_属性将所有旧关联对象替换为新对象。最好的方法是什么 如果使用下面的代码,每次使用嵌套的_属性更新主对象时,都会创建新的关联对象Ruby on rails Rails 4有许多嵌套的属性来替换所有属性,ruby-on-rails,ruby,ruby-on-rails-4,nested-attributes,Ruby On Rails,Ruby,Ruby On Rails 4,Nested Attributes,我想使用嵌套的_属性将所有旧关联对象替换为新对象。最好的方法是什么 如果使用下面的代码,每次使用嵌套的_属性更新主对象时,都会创建新的关联对象 accepts_nested_attributes_for :days 编辑 我通过下面的验证前的回调得到了它: def replace_days db_days = days.where('id IS NOT NULL') all_days = days all_days -= db_days self.days = all_da
accepts_nested_attributes_for :days
编辑
我通过下面的验证前的回调得到了它:
def replace_days
db_days = days.where('id IS NOT NULL')
all_days = days
all_days -= db_days
self.days = all_days
end
问题是我对子模型的唯一验证。Rails将访问数据库以验证唯一性。由于我的替换项在验证时不在数据库中,因此出现验证错误。不知道如何绕过这个问题,也不知道这是否是最好的方法。我希望rails有一些本机函数或参数,可以帮助我完成我想要的工作。添加一个reject\u if
选项,如下所示:
accepts_nested_attributes_for :days, reject_if: :all_blank
这应该可以防止您描述的行为。这是我能得到的最好结果:
def days_attributes=(*attrs)
self.days = []
super(*attrs)
end
希望还不算太晚。我不知道自己是否足够清楚,我需要将所有旧的days
替换为嵌套属性中的days
。