我最近从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中它返回一个新的已排序实例但不修改实际实例。有办法克服这个问题吗?
答案 0 :(得分:0)
试试这个:
#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
答案 1 :(得分:0)
存储前的排序确实很有帮助。当您从数据库中提取它们时,它们可能不是那种顺序。您不想在有多个(或在项目模型中)指定订单。
如果您的订购更复杂,请发布该逻辑。
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