Rails嵌套模型表单在子对象上显示随机顺序

时间:2012-05-02 14:51:58

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

我已关注并使用Ryan Bate's nested model form tutorial为我的发布创建曲目(在教程中为调查提问)。

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

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

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

然后在发布_form部分我有:

<%= 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方法,该方法会根据我现在添加到表单中的位置字段对曲目进行排序?

1 个答案:

答案 0 :(得分:1)

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