A report_template
has_many
report_template_columns
,其各自具有 name
和index
屬性。如何防止使用ActiveRecord中的作用域has_many嵌套創建失敗?
class ReportTemplateColumn < ApplicationRecord
belongs_to :report_template
validates :name, presence: true
end
class ReportTemplate < ApplicationRecord
has_many :report_template_columns, -> { order(index: :asc) }, dependent: :destroy
accepts_nested_attributes_for :report_template_columns, allow_destroy: true
end
report_template_columns
需要按索引列排序。我申請這與在has_many
相關聯的範圍,但這樣做會導致以下錯誤:
> ReportTemplate.create!(report_template_columns: [ReportTemplateColumn.new(name: 'id', index: '1')])
ActiveRecord::RecordInvalid: Validation failed: Report template columns report template must exist
from /usr/local/bundle/gems/activerecord-5.1.4/lib/active_record/validations.rb:78:in `raise_validation_error'
如果我刪除同一命令成功的範圍。
如果我將order
範圍替換爲where
範圍,該命令以相同的方式失敗,所以它似乎是存在範圍而不是使用order
具體。
如何在不破壞嵌套創建的情況下將範圍應用於has_many
?
不要範圍適用於ASSOCATION。它的反模式與'defual_scope'相同。看起來似乎很方便,但如果您不想稍後應用範圍,會使事情變得非常困難。 http://weblog.jamisbuck.org/2015/9/19/default-scopes-anti-pattern.html – max