我可以使用before_save来排序nested_attributes吗?

时间:2012-05-03 09:29:38

标签: ruby-on-rails ruby-on-rails-3 activerecord

我在发布模型中有以下代码来保存与发布相关的跟踪。在其当前状态下,轨道以随机顺序保存到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。

1 个答案:

答案 0 :(得分:0)

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

class Album < ActiveRecord::Base
  has_many :tracks, :order => "track_number asc"
end