0

我的 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。

4

1 回答 1

0

我假设您需要按特定顺序选择这些曲目。然后你可以:order在你的关联中定义参数,例如:

class Album < ActiveRecord::Base
  has_many :tracks, :order => "track_number asc"
end
于 2012-05-03T09:51:03.293 回答