Моим моделям необходимо постоянно устанавливать определенный порядок ассоциации has_many, даже до добавления новых строк в базу данных.
Предположим, у меня есть ассоциация has_many / assign_to следующим образом:
class Assembly < ActiveRecord::Base
has_many :parts, :order => "part_number ASC"
end
class Part < ActiveRecord::Base
belongs_to :assembly
end
Насколько я понимаю, флаг :order
в ассоциации has_many
упорядочит записи, поступающие из базы данных, добавив в запрос SQL предложение ORDER BY
. Однако в моем случае также важно, чтобы коллекция деталей в Assembly была заказана для проверки правильности, и это должно произойти даже до того, как записи будут записаны в базу данных.
Я немного поэкспериментировал с этим в консоли rails, выполнив следующее:
a = Assembly.new
p1 = Part.new( :part_number => 2 )
p2 = Part.new( :part_number => 1 )
a << p1 #p1 is added first but should be in second place in collection
a << p2 #p2 is added second but should be in first place in collection
a.parts[0] #expecting to see part_number=1 but I still get part_number=2
Следовательно, подпрограмма проверки для нового объекта сборки не будет работать. Может ли кто-нибудь порекомендовать лучший способ обеспечения порядка в коллекции has_many перед записью в базу данных?