Rails嵌套表单创建

时间:2016-02-05 15:26:07

标签: ruby-on-rails ruby nested

我有一个应用程序,我想要创建嵌套表单

我的模特:

class Abonent < ActiveRecord::Base
    belongs_to :town
    has_many :numbers, :dependent => :destroy

    accepts_nested_attributes_for :numbers
end

class Number < ActiveRecord::Base
    belongs_to :abonent
end

Abonents控制器:

class AbonentsController < ApplicationController


def new
    @abonent = Abonent.new
end

def create
    @abonent = Abonent.new abonents_params
    if @abonent.save
        redirect_to :towns
    else
        render action: "new"
    end
end

private 

 def abonents_params
    params.require(:abonents).permit( :fullname, :work_position, :department, :email, :town_id, numbers_attributes: [ :phone ] )
 end

end

和支持者观看

<hr><br>

<%= form_for :abonents, url: abonents_path do |f| %>
  <%= f.label :fullname %>:
  <%= f.text_field :fullname %><br /> <br /> 

  <%= f.label :work_position %>:
  <%= f.text_field :work_position %><br /><br /> 

  <%= f.label :department %>:
  <%= f.text_field :department %><br /><br /> 

  <%= f.label :email %>:
  <%= f.text_field :email %><br /><br /> 

  <%= f.label :town_id %>:
  <%= f.select :town_id, Town.all.collect { |p| [ p.ru_name, p.id ] } %><br /><br /> 

  <%= f.fields_for :numbers do |phones|%>
    <%= phones.label :phone %>:
    <%= phones.text_field :phone %><br /><br /> 

  <% end %>


  <%= f.submit %>
<% end %>

问题是当我提交表单时,它创建了一个abonent,但是没有为这个abonent创建数字。

我看到了许多不同的手册,并且无法在我的代码中找到错误。 请帮忙。 谢谢。

UPD 我在github上为此问题添加了repo

1 个答案:

答案 0 :(得分:1)

您需要build 相关记录

def new
  @abonent = Abonent.new
  @abonent.numbers.build
end