web-dev-qa-db-ja.com

Rails 4:fields_for in fields_for

私はRoRを学習していますが、次のようなhas_oneモデルを使用してfields_forを別のフィールドに設定する方法を見つけようとしています:

class Child < ActiveRecord::Base
    belongs_to :father
    accepts_nested_attributes_for :father
end

class Father < ActiveRecord::Base
    has_one :child
    belongs_to :grandfather
    accepts_nested_attributes_for :grandfather
end


class Grandfather < ActiveRecord::Base
    has_one :father
end

Railscastのネストされたモデルフォームパート1を使用して、これらを取得しました。children_controller.rb内:

  def new
    @child = Child.new
    [email protected]_father
    father.build_grandfather
  end

def child_params
      params.require(:child).permit(:name, father_attributes:[:name], grandfather_attributes:[:name])
    end

そして私のフォーム:

<%= form_for(@child) do |f| %>
  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  mother:<br>
  <%= f.fields_for :father do |ff| %>
    <%= ff.label :name %>
    <%= ff.text_field :name %><br>
      grand mother:<br>
      <%= f.fields_for :grandfather do |fff| %>
        <%= fff.label :name %>
        <%= fff.text_field :name %>
      <% end %>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

私は次の方法でデータを取得しようとしています:

<%= child.father.name %>
<%= child.father.grandfather.name %>

しかし、祖父の名前は機能しません。私は間違いを見つけることができません...これを手伝ってくれる人はいますか?ありがとう!

15
user3029400

切り替えてみてください:

<%= f.fields_for :grandfather do |fff| %>

に:

<%= ff.fields_for :grandfather do |fff| %>

そして切り替え:

params.require(:child).permit(:name, father_attributes:[:name], grandfather_attributes:[:name])

に:

params.require(:child).permit(:name, father_attributes:[:name, grandfather_attributes:[:name]])
20
cschroed