在使用回调保存之前作为关联排序


我最近从 Rails 3 迁移到 Rails 4,

在这个过程中我注意到排序关联在 Rails 4 中不起作用。以下是示例模型:

#box.rb
class Box < ActiveRecord::Base
  has_many :items
  accepts_nested_attributes_for :items, :allow_destroy => true
  before_validate
    items.sort! { <some condition> } 
  end
end
#item.rb
class Item < ActiveRecord::Base
  belongs_to :box
end
在 Rails 3 中,

关联的sort!方法修改了items哈希,但在 Rails 4 中,它返回一个新的排序实例,但不修改实际实例。有没有办法克服这个问题?

试试这个:

#box.rb
class Box < ActiveRecord::Base
  has_many :items
  accepts_nested_attributes_for :items, :allow_destroy => true
  before_validate
    self.items = items.sort { <some condition> } 
  end
end
#item.rb
class Item < ActiveRecord::Base
  belongs_to :box
end

在存储之前进行排序并没有真正的帮助。当您从数据库中提取它们时,它们可能不按该顺序排列。您不想在具有多个(或在物料模型中)指定顺序。

如果您有更复杂的排序,请发布该逻辑。

class Box < ActiveRecord::Base
  # Can replace position with hash like: { name: :asc }
  has_many :item, -> { order(:position) }
  accepts_nested_attributes_for :items, :allow_destroy => true
  before_validate
    items.sort! { <some condition> } 
  end
end

相关内容

  • 没有找到相关文章

最新更新