0

リリース用の次のフォームがあり、トラックのフィールドはリリース モデル内のネストされた属性として受け入れられます。

<%= form_for(@release) do |f| %>
<%= f.hidden_field :user_id, :value => current_user.id, :class => "text" %>
<%= f.text_field :title, :class => "text" %>

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

<% end %>

私のリリースモデルには以下が含まれます:

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

  before_save :order_tracks
  before_update :order_tracks


  def order_tracks 
    releases_tracks.each { |t| t.position = track_attributes.position }
    tracks.each { |t| t.user_id = user_id}
    tracks.each { |t| t.label_id = label_id}
  end

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

フォームの fields_for 部分に入力された位置の値を取得しようとしている下の行を除いて、すべてがうまく機能します。たとえば、user_id などの親フォームの値にアクセスできますが、子の値にアクセスするにはどうすればよいですか?

releases_tracks.each { |t| t.position = track_attributes.position }

皆さんありがとう!

(注:これにはacts_as_listを使用したくありません)

4

1 に答える 1

0

使用してみてください:

releases_tracks.each { |t| t.position = track_attributes[:position] }  or 
releases_tracks.each { |t| t.position = track_attributes["position"] } 
于 2012-05-04T08:58:02.683 に答える