2016-02-19 2 views
1

Когда я пытаюсь редактировать контакт, чтобы добавить DataType, я получаю сообщение об ошибке «Unpermitted parameter: data_format». Я пробовал следующие аналогичные ассоциации, которые я нашел в Интернете, но не могу понять, что мне не хватает. Прошу прощения, если это избыточно.Где разрешить параметр в ассоциации has_one/belongs_to?

Вот соответствующие фрагменты информации:

Модели:

# == Schema Information 
# 
# Table name: contacts 
# 
# id   :integer   not null, primary key 
# name  :string 
# email  :string 
# phone  :string 
# mobile  :string 
# created_at :datetime   not null 
# updated_at :datetime   not null 
# supplier_id :integer 
# 
class Contact < ActiveRecord::Base 
    has_one :data_type 
    accepts_nested_attributes_for :data_type, allow_destroy: true 
end 
# == Schema Information 
# 
# Table name: data_formats 
# 
# id   :integer   not null, primary key 
# name  :string 
# created_at :datetime   not null 
# updated_at :datetime   not null 
# contact_id :integer 
# 
class DataFormat < ActiveRecord::Base 
    belongs_to :contact 
end 

Контакт контроллера:

class ContactsController < ApplicationController 
    before_action :set_contact, only: [:show, :edit, :update, :destroy] 

    def new 
    @contact = Contact.new 
    end 

    def create 
    @contact = Contact.new(contact_params) 

    respond_to do |format| 
     if @contact.save 
     format.html { redirect_to @contact, notice: 'Contact was successfully created.' } 
     format.json { render :show, status: :created, location: @contact } 
     else 
     format.html { render :new } 
     format.json { render json: @contact.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    private 

    def set_contact 
     @contact = Contact.find(params[:id]) 
    end 

    def contact_params 
     params.require(:contact).permit(:name, :email, :phone, :mobile, :data_format, 
             data_format_attributes: [ :id, :name, :contact_id, :_destroy ]) 
    end 
end 

Редактировать Вид:

<%= simple_form_for @contact do |f| %> 
    <div class="form-group"> 
    <div class="col-lg-6"> 
     <%= f.input :name %> 
    </div> 
    <div class="col-lg-6"> 
     <%= f.simple_fields_for :data_format do |t| %> 
     <%= t.input :id, label: 'Date Format:', :collection => DataFormat.order(:name) %> 
     <% end %> 
    </div> 
    <div class="col-lg-6"> 
     <%= f.label "Submit", class: 'control-label' %> 
     <%= f.button :submit, class: 'btn btn-primary form-control' %> 
    </div> 
    </div> 
<% end %> 

DataType (s) появляются в форме, и я могу их выбрать. Итак, я знаю, что проблема должна быть в контроллере.

Любая помощь была бы принята с благодарностью!

ответ

1

Ваш contact.rb принимает имя вложенных атрибутов и permitted parameters несоответствие имени. contact.rb упоминает: accepts_nested_attributes_for :data_type, allow_destroy: true .

contact.rb

class Contact < ActiveRecord::Base 
    has_one :data_format 
    accepts_nested_attributes_for :data_format, allow_destroy: true 
end 

contacts_controller.rb

class ContactsController < ApplicationController 
    before_action :set_contact, only: [:show, :edit, :update, :destroy] 

    def new 
    @contact = Contact.new 
    @contact.data_format = DataFormat.new 
    end 

    ... 

    private 

     def set_contact 
      @contact = Contact.find(params[:id]) 
     end 

     def contact_params 
      params.require(:contact).permit(:name, :email, :phone, :mobile, :data_format, 
              data_format_attributes: [ :id, :name, :contact_id, :_destroy ]) 
     end 

форма

<%= simple_form_for @contact do |f| %> 
    <div class="form-group"> 
    <div class="col-lg-6"> 
     <%= f.input :name %> 
    </div> 
    <div class="col-lg-6"> 
     <%= f.simple_fields_for :data_format, @contact.data_format do |t|%> 
     <%= t.input :id, label: 'Date Format:', :collection => DataFormat.order(:name) %> 
     <% end %> 
    </div> 
    <div class="col-lg-6"> 
     <%= f.label "Submit", class: 'control-label' %> 
     <%= f.button :submit, class: 'btn btn-primary form-control' %> 
    </div> 
    </div> 
<% end %> 
+0

Эй! Спасибо за ваш ответ! После внесения этих исправлений мое поле ввода исчезло. Какие-либо предложения? – nkulig

+0

Вам также нужно '' 'build''' внутри' '' '' '' '' '' '' ', чтобы иметь экземпляр объекта для формы для загрузки. Я обновил ответ. Посмотрите, поможет ли это. – shayonj

+0

Эй! Я просто наткнулся на это. Однако вход еще не отображается. – nkulig

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