2016-09-15 2 views
0

Ошибка: самовольный параметр: свойстваRails 5 Вложенных атрибуты «Самовольная параметр» - белый список

Я Whitelisting свойства {} в request_controller.rb Это, как правило, работает, но не в этот раз.

Я не смог сохранить некоторые данные, введенные в форму. 3 поля, которые не сохраняются, поступают из динамической формы «request_type». Я последовал за Rails Cast эпизодом 403 для этого решения, которое я хорошо работаю в другом проекте, но не в этом.

Источник: http://railscasts.com/episodes/403-dynamic-forms

К сожалению, если это дубликат вопрос, но я посмотрел на несколько других вопросов, и я могу не точечную, что я делаю неправильно здесь

Я исследовал несколько вопросов здесь, но я до сих пор не в состоянии заставить его работать:
Rails 4 Nested Attributes Unpermitted Parameters
Nested attributes - Unpermitted parameters Rails 4

Я опуская некоторые вещи, чтобы сделать его легче повторно введите код. Пожалуйста, спросите меня, нужно ли вам больше узнать.

Вот лог:

Processing by RequestsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"8EASewOIxY58b+SU+dxd2YAfpjt38IdwNSju69RPwl/OKfx3AfmvLav79igj8CqPbDwi0eJAwojRbtm+C9F6wg==", "request"=>{"name"=>"asdasddaa", "due_date(1i)"=>"2016", "due_date(2i)"=>"9", "due_date(3i)"=>"15", "user_id"=>"1", "project_id"=>"1", "request_type_id"=>"2", "properties"=>{"Name and last name"=>"asdasd", "Mobile"=>"asdada", "Office tel."=>"asdadas"}}, "commit"=>"Create Request"} 
Unpermitted parameter: properties 

Update

Если я изменить request_params к этому:

def request_params 
    params.require(:request).permit(:name, :due_date, :group_id, :user_id, :project_id, :request_type_id, properties:{}).tap do |whitelisted| 
    whitelisted[:properties] = params[:request][:properties] 
    end 
end 

См: свойства: {}

Я получаю эту ошибку:

Unpermitted parameters: Name and last name, Mobile, Office tel. 

request_controller.rb

def new 
    @request = Request.new 
    @request_type = RequestType.find(params[:request_type_id]) 
    @project = @request_type.project.id 
    end 

    def create 
    @request = Request.new(request_params) 

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

    def request_params 
     params.require(:request).permit(:name, :due_date, :group_id, :user_id, :project_id, :request_type_id, :properties).tap do |whitelisted| 
     whitelisted[:properties] = params[:request][:properties] 

     end 
    end 

request_types_controller.rb

def new 
    @request_type = RequestType.new 
    @project = Project.find(params[:project]) 
    end 

    def create 
    @request_type = RequestType.new(request_type_params) 

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

    def update 
    respond_to do |format| 
     if @request_type.update(request_type_params) 
     format.html { redirect_to @request_type, notice: 'Request type was successfully updated.' } 
     format.json { render :show, status: :ok, location: @request_type } 
     else 
     format.html { render :edit } 
     format.json { render json: @request_type.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_request_type 
     @request_type = RequestType.find(params[:id]) 
    end 


    def request_type_params 
     params.require(:request_type).permit(:name, :project_id, properties:{}, fields_attributes: [:name, :field_type, :required, :id, :_destroy]) 
     # params.require(:product_type).permit(:name, :product_type_id)  
    end 

модели/request.rb

class Request < ApplicationRecord 
    belongs_to :group 
    belongs_to :user 
    belongs_to :project 
    belongs_to :request_type 
    serialize :properties, Hash 
end 

модели/request_type.rb

class RequestType < ApplicationRecord 
    belongs_to :project 
    has_many :fields, class_name: "RequestField" 
    accepts_nested_attributes_for :fields, allow_destroy: true 
    has_many :requests 

end 

модели/request_field.rb

class RequestField < ApplicationRecord 
    belongs_to :request_type 
end 

просмотров/запросы/новый. HTML.Еврорадио

<%= form_for @request do |f| %> 

    <%= f.fields_for :properties, OpenStruct.new(@request.properties) do |builder| %> 
    <% @request_type.fields.each do |field| %> 
     <%= render "requests/fields/#{field.field_type}", field: field, f: builder %> 
    <% end %> 
    <% end %>    


    <div class="actions"> 
    <%= f.submit class:"btn btn-primary" %> 
    </div> 
<% end %> 
+0

У вас есть контроллер request_type? – luissimo

+0

Да, я только что обновил вопрос с request_types_controller.rb Спасибо! – Asan

ответ

0

Try удаление: свойства из ваших request_params в вашем request_controller так:

def request_params 
    params.require(:request).permit(:name, :due_date, :group_id, :user_id, :project_id, :request_type_id).tap do |whitelisted| 
    whitelisted[:properties] = params[:request][:properties] 
end 

EDIT

def request_params 
    params.require(:request).permit(:id, :name, :due_date, :group_id, :user_id, :project_id, :request_type_id) 
    params.require(:properties).permit! 
end! 
+0

Спасибо за ответ, но он не сработал – Asan

+0

Что именно не получилось, вы получили ту же ошибку? или другой? – luissimo

+0

Да, получилась та же ошибка – Asan

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