我最近从 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