2016-01-15 1 views
0

у меня есть ситуации, когда я получаю ошибкуСамовольной Параметр, несмотря на включение в сильном Params

Unpermitted parameter: incorporation 

однако я его в списке сильного Params:

def company_params 
     params.require(:company).permit(:id, :name, :employee_stock_options, :options_pool, :state_corp, :street, :city, :state, :zip, :_destroy, 
          incorporation_attributes: [:title, :trademark_search, :user_id, :employee_stock_options, :final_submit, :submit, :_destroy], 
          names_attributes: [:id, :name_string, :suffix, :approved, :snapshot, :company_id, :_destroy], 

Там в бит улова, который мог бы внести свой вклад в проблему: Контроллер, о котором идет речь, на самом деле является контроллером Incorporation. Но, как вы могли заметить, мы используем его для создания родительской модели Company, которая has_one :incorporation. Я понимаю, что это немного странно, но у меня есть причины для того, чтобы мои модели были структурированы таким образом И для использования incorporations_controller для этого.

Соответственно, я моя форма структурирована следующим образом:

<%= simple_form_for @company, url: url_for(action: @caction, controller: 'incorporations'), html: {id:"incorporationform"}, remote: false, update: { success: "response", failure: "error"} do |company| %> 
    <%= company.simple_fields_for @incorporation do |f| %> 
    <div class="padded-fields"> 
     <div class="form_subsection"> 
      <%= f.input :trademark_search, as: :radio_buttons, label: 'Would you like us to do a trademark search and provide advice regarding any issues we identify in relation to the name you have selected?', input_html: { class: 'form-control radio radio-false' } %> 
     </div> 
    </div> 
    <% end %> 
    .... 
<% end %> 

Спасибо заранее для любой проницательности

Update: Мои new и create методы являются в incorporations_controller

def new 
     @user=current_user 
     @company = @user.companies.build 
     @incorporation = @company.build_incorporation 
     @action = "new" 
     @caction = "create" 
    end 

    def create 
     @snapshot="incorporation" 
     @company = current_user.companies.build(company_params) 
     @incorporation = @company.build_incorporation 

     if @company.save 
      current_user.companies << @company 
      if params[:final_submit] 
       redirect_to incorporations_index_path 
      else 
       redirect_to edit_incorporation_path(@incorporation), notice: "Successfuly saved incorporation info." 
      end 
     else 
      render 'new', notice: "Something went wrong; form unable to be saved." 
#  render :nothing => true 
     end 
    end 

Обновление 2: В Са се это помогает, вот параметры из журнала:

"company"=>{"names_attributes"=>{"145\2853672570"=>{"name_string"=>"test19", "suffix"=>"INC", "_destroy"=>"false"}}, "fiscal_year_end_month"=>"", "fiscal_year_end_day"=>"", "street"=>"", "city"=>"", "state"=>"", "zip"\=>"", "issued_common_stock"=>"10,000,000", "employee_stock_options"=>"false", "options_pool"=>"0", "incorporation"=>{"submit"=>"0"}}, "commit"=>"Save"} 

я заметил, что (в отличие от других вложенных атрибутов) включение не имеет _attributes строку после нее. Может ли это иметь какое-то значение?

Update3: Я также, кажется, создаю запись регистрации в таблице объединений с соответствующим правом собственности. Однако никакие другие поля не заполняются.

+1

'инкорпорация' не указана в ваших сильных параметрах. Попробуй еще раз. – sevenseacat

ответ

2

Вы не должны иметь incorporation в ваших представленных Params в любом случае - он должен быть incorporation_attributes (как вы уже получили в вашей сильной Титулы).

-

Если вы используете fields_for, вы должны ожидать [association]_attributes быть передан в качестве параметра из формы.

Не имея это означает, что вы либо не получили accepts_nested_attributes_for в вашей родительской модели, или вы не построили свой ребенок объекта:

#app/models/company.rb 
class Company < ActiveRecord::Base 
    has_one :incorporation 
    accepts_nested_attributes_for :incorporation 
end 

-

#app/controllers/incorporations_controller.rb 
class IncorporationsController < ApplicationController 
    def new 
     @company = Company.new 
     @company.build_incorporation #-> only needed if a new record 
    end 

    def create 
     @company = Company.new company_params 
     @company.save 
    end 
end 

Обновление

Какая странная проблема у вас есть - вы проходите names_attributes в порядке, и все же incorporation не работает.

Единственное, что я сказал бы, посмотрев на ваш params, заключается в том, что ваш incorporation проходит только "submit" => "0". Я не понимаю, что это такое; в любом случае есть многочисленные проблемы с формой:

def new 
    @company = current_user.companies.new 
    @company.build_incorporation 
    ... 
end 

def create 
    @company = current_user.companies.new company_params 
    @company.save #-> don't need to "build" in create 
end 

Это позволит вам ...

<%= simple_form_for @company, url: url_for(action: @caction, controller: 'incorporations'), html: {id:"incorporationform"}, remote: false, update: { success: "response", failure: "error"} do |company| %> 
    <%= company.simple_fields_for :incorporation do |f| %> 
    <%= f.input ... 
    <% end %> 

При использовании fields_for, вам нужно только передать родительский объект (в вашем случае @company). Здание incorporation автоматически заполнит fields_for без явного объявления его.

+0

Thanks Rich. У меня есть 'has_one: инкорпорация' и' accepts_nested_attributes_for: инкорпорация' в 'company.rb'. Мои методы «нового» и «создания» были добавлены к вопросу выше. Я считаю, что они составляют то, что у вас здесь, но я могу ошибаться. Еще раз спасибо. – neanderslob

+0

Спасибо, позвольте мне взглянуть на вас –

+0

Я также ознакомился с параметрами в моем журнале и заметил, что «инкорпорация» не сопровождается стандартными '_attributes'. (См. Дополнительное обновление выше) Может ли это быть ключом ... что-то? – neanderslob

0

Ошибка указывает на то, что нам нужно определить это в company модели:

accepts_nested_attributes_for :incorporation 
attr_accessible :incorporation_attributes 
+2

теги 'ruby-on-rails-4' и' strong-parameters' указывают на сильные параметры, и 'attr_accessible' is..well, не используя его :) –

 Смежные вопросы

  • Нет связанных вопросов^_^