我已关注并使用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方法,该方法会根据我现在添加到表单中的位置字段对曲目进行排序?
答案 0 :(得分:1)
执行SQL查询的顺序通常是随机的。这既适用于批量插入,也适用于选择。如果您需要按特定顺序记录,则必须使用ORDER BY子句。根据记录的保存方式,您可以对id进行排序,否则请考虑添加表示每个项目列表位置的字段。