ruby-on-rails – 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
    father=@child.build_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 %>

但祖父的名字不会奏效.
我找不到错误…有人帮忙吗?
谢谢!

解决方法

尝试切换:
<%= f.fields_for :grandfather do |fff| %>

至:

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

切换:

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

至:

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

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...