我在发布模型中有以下代码来保存与发布相关的跟踪。在其当前状态下,轨道以随机顺序保存到DB。我知道SQL语句不是按照设定顺序和原因执行的。
accepts_nested_attributes_for :tracks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => :true
def track_attributes=(track_attributes)
track_attributes.each do |attributes|
tracks.build(attributes)
artists_tracks.build(attributes)
end
end
是否可以使用before_save调用添加order_tracks def以确保它们以正确的顺序进入数据库?我有track_number字段,可用于确定订单。
这样的东西?
before_save :order tracks
def order_tracks
tracks.sort_by { |track| track.track_number }
end
(以上不起作用)
修改
我发现了一个相关的问题。我之前通过轨道控制器创建动作设置标签和用户ID:
@track.user_id = current_user.id
@track.label_id = @release.label.id
现在我通过accepts_nested_attributes添加曲目,这不再适用。
我在想如果我能弄清楚在哪里设置这些,我可以写一些类似于手动设置我的releases_tracks模型中的位置而不是通过acts_as_list。
答案 0 :(得分:0)
我假设您需要按特定顺序选择这些曲目。然后,您可以在关联中定义:order
param,例如:
class Album < ActiveRecord::Base
has_many :tracks, :order => "track_number asc"
end