我的 Release 模型中有以下代码来保存与发布关联的轨道。在当前状态下,曲目以随机顺序保存到数据库中。我知道 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。