1

我遵循并使用了Ryan Bate 的嵌套模型表单教程来为我的版本创建轨道(在教程中是调查问题)。

这非常有效,直到我注意到轨道添加到数据库的顺序似乎是随机的,而不是它们出现或以我需要的形式输入。

轨道是使用发布模型中的以下定义构建的:

 def track_attributes=(track_attributes)
    track_attributes.each do |attributes|
      tracks.build(attributes)
    end
  end

然后在 release _form partial 我有:

<%= f.fields_for :tracks do |builder| %>
<%= render 'track_fields', :f => builder %>
<% end %>

这会引入 _track_fields 部分,其中包含:

<%= f.text_field :name, :class => "text" %>
<%= f.text_field :isrc, :class => "text" %>
<%= f.check_box :_destroy %>
etc

任何想法为什么轨道阵列丢失了它们输入的顺序?

我在releases_tracks 中使用acts_as_list 有许多可以正常工作的直通模型,但它从错误添加到轨道表的内容中获取顺序。

编辑:

看来我的曲目正在保存:

accepts_nested_attributes_for :tracks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => :true

不像我想象的那样通过 track_attributes=(track_attributes) def。

有谁知道如何编写一个 before_save 方法,该方法将按我现在添加到表单中的位置字段对曲目进行排序?

4

1 回答 1

1

SQL 查询的执行顺序通常是随机的。这可以适用于批量插入和选择。如果您需要按特定顺序记录记录,则必须使用 ORDER BY 子句。根据记录的保存方式,您可能可以按 id 进行排序,否则考虑添加一个表示每个项目的列表位置的字段。

于 2012-05-02T14:58:13.893 回答