1

У меня возникла проблема с сохранением содержимого вложенного поля. У меня две модели: Incorporation и Company. Они связаны следующим образом:Ошибка: неперечисленные параметры с вложенными атрибутами

class Company < ActiveRecord::Base 
    belongs_to :incorporation 
end 

class Incorporation < ActiveRecord::Base 
    has_one :company 

    accepts_nested_attributes_for :company 
end 

Моя цель является создание нового Company и Incorporation запись в той же форме, используя как контроллер инкорпорации и вид.

(Проблема) Тем не менее, каждый раз, когда я пытаюсь отправить форму, запись включение проходит, но запись компания держится с Unpermitted parameters ошибки:

Started POST "/incorporations" for 127.0.0.1 at 2014-12-15 22:40:59 -0700 
Processing by IncorporationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"lCj/ZtNNE/9l/UAlYcnA8EAe8vmMN010toS4t5e+ZkA=", "incorporation"=>{"title"=>"test", "company"=>{"name"=>"test"}}, "button"=>""} 
Unpermitted parameters: company 
Completed 500 Internal Server Error in 4ms 

Это особенно удивительно, как я beleive Я правильно установил свои сильные параметры. Ниже мой контроллер.

class IncorporationsController < ApplicationController 
    def index 
    end 

    def show 
    end 

    def new 
@incorporation = Incorporation.new 
@company = Company.new 
    end 

    def create 
@incorporation = Incorporation.new(incorporation_params) 

if @incorporation.save 
    redirect_to @incorporation, notice: "Successfuly saved incorporation info." 
else 
    render 'new' 
end 
    end 

    def edit 
    end 

    def show 
    end 

    private 

    def incorporation_params 
params.require(:incorporation).permit(:title, company_attributes: [:name, :state_corp, :street, :city, :state, :zip, :outstanding_common_stock, :fiscal_year_end_month, :fiscal_year_end_day]) 
    end 
end 

форма частичной я использую следующим образом:

<%= form_for @incorporation do |f| %> 
    <div class="panel-body"> 
    <%= f.text_field :title, input_html: { class: 'form-control' } %> 
    <h3>TEST</h3> 
    <%= f.fields_for @company do |company| %> 
     <%= company.text_field :name, input_html: { class: 'form-control' } %> 
    <% end =%> 
    </div> 
    <%= f.button :submit, class: "btn btn-primary" %> 

<% end =%> 

Любые идеи будут оценены.

+1

: компания не '@ компания' AND' @ company' = '@ incporation.build_company' – argentum47

+0

@ argentum47 Эй, чувак, спасибо большое! Не стесняйтесь писать свой комментарий в качестве ответа, чтобы я мог дать вам кредит. – neanderslob

ответ

1

Обычный способ сделать выше будет

Контроллер

def new 
    @incorporation = Incorporation.new 
    @company = @incorporation.build_company 

и на ваш взгляд

<%= form_for @incorporation do |f| %> 
    <div class="panel-body"> 
    <%= f.text_field :title, input_html: { class: 'form-control' } %> 
    <h3>TEST</h3> 
    <%= f.fields_for :company do |company| %> 
     <%= company.text_field :name, input_html: { class: 'form-control' } %> 
    <% end =%> 
    </div> 
    <%= f.button :submit, class: "btn btn-primary" %> 
<% end %> 

Остальное в порядке.

0

Перекрестный контроль нескольких вещей в базе кода.

1) У вас должна быть инкорпорация в каталоге компании. Если у вас его нет, добавьте его.

2) Попробуйте изменение следующий код в новом действии:

def new 
    @incorporation = Incorporation.new 
    @incorporation.company = Company.new 
    #Or you can simply build company also like below 
    #@incorporation.company.build 
end 

изменение Попробуйте следующее в виду:

<%= form_for @incorporation do |f| %> 
    <div class="panel-body"> 
    <%= f.text_field :title, input_html: { class: 'form-control' } %> 
    <h3>TEST</h3> 
    <%= f.fields_for :company do |company| %> 
     <%= company.text_field :name, input_html: { class: 'form-control' } %> 
    <% end =%> 
    </div> 
    <%= f.button :submit, class: "btn btn-primary" %> 

<% end =%>