情况:
我有 4 个具有以下关系的模型:
class A < ActiveRecord::Base
belongs_to :b
belongs_to :c
belongs_to :d
end
class B < ActiveRecord::Base
has_many :as, dependent: :destroy
end
class C < ActiveRecord::Base
belongs_to :d
end
class D < ActiveRecord::Base
has_many :cs, dependent: :destroy
end
问题:
我需要将模型 A 对象a
与模型 B 对象相关联,b
但我还需要为调用时a
出现在ActiveRecord CollectionProxyb.as
中的对象设置一个位置,它不起作用。所有将对象添加到结果中的某个位置的尝试最终都会在a
a.bs
a
最后添加新对象。有可能吗?我知道有可能在数组中和查询时定义排序,但是在添加新关系时是否可以直接定义排序?
例子:
模型 B 对象b
有 3 个模型 A 对象。
b.as
=> #<ActiveRecord::Associations::CollectionProxy [
#<A id: 39038, quantity: 3.0 created_at: "2016-02-01 15:51:26", updated_at: "2016-02-01 15:51:26", d_id: 4144, c_id: nil, b_id: 81218>,
#<A id: 39039, quantity: 2.0, created_at: "2016-02-01 15:51:26", updated_at: "2016-02-01 15:51:26", d_id: 4145, c_id: nil, b_id: 81218>,
#<A id: 39040, quantity: 2.0, created_at: "2016-02-01 15:51:26", updated_at: "2016-02-01 15:51:26", d_id: 4145, c_id: 1590, b_id: 81218>]>
我创建了第四个模型 A 对象a
,当这样调用时,我需要它出现在第二位b.as
:
a = A.create(quantity: 4.0, d: D.find(4144), c: C.find(1612), b: b)
基本上顺序应该这样定义:
b.as
=>
a1: d_id: 4144, c_id: nil
a2: d_id: 4144, c_id: 1612
a3: d_id: 4145, c_id: nil
a4: d_id: 4145, c_id: 1590
...意味着a
具有相同d_id
属性的每个对象都应该组合在一起,同时拥有那些a
在c_id.nil?
首位的对象。