我遵循并使用了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 方法,该方法将按我现在添加到表单中的位置字段对曲目进行排序?