Параметры Rails в простой форме существуют, но не проходят через ActionController :: ParameterMissing сильные параметры - PullRequest
1 голос
/ 22 марта 2020

При создании я получаю пропущенные параметры.

Rails Error: `ActionController::ParameterMissing in ClientsController#create`

Консоль params.inspect:

<ActionController::Parameters {\"utf8\"=>\"✓\", \"authenticity_token\"=>\"yJ/iKj06W/385SQ8aGUJAiDd94KiYgg3nxKueXxqr2FKcPy/hUb84GzUar3ILAumBc9PrCdKthQnvhf73UVrAw==\", \"client\"=>{\"genero\"=>\"0\", \"nome\"=>\"asdfasdf\", \"sobrenome\"=>\"asdf \", \"nacionalidade\"=>\"\", \"estadocivil\"=>\"asdf \", \"capacidade\"=>\"\", \"profissao\"=>\"\", \"empresa_atual\"=>\"\", \"nascimento(1i)\"=>\"2020\", \"nascimento(2i)\"=>\"3\", \"nascimento(3i)\"=>\"21\", \"nome_mae\"=>\"\", \"nb\"=>\"\", \"rg\"=>\"\", \"cpf\"=>\"\", \"email\"=>\"\", \"endereco\"=>\"\", \"cidade\"=>\"\", \"estado\"=>\"\", \"dados_bancarios\"=>\"\", \"cep\"=>\"\", \"telefone\"=>\"\", \"notas\"=>\"\"}, \"commit\"=>\"Create Client\", \"controller\"=>\"clients\", \"action\"=>\"create\"} permitted: false>

Rails S Консоль:

Completed 400 Bad Request in 4ms (ActiveRecord: 0.0ms)

ActionController::ParameterMissing (param is missing or the value is empty: nome):

app/controllers/clients_controller.rb:39:in `client_params'
app/controllers/clients_controller.rb:16:in `create'
Started PUT "/__web_console/repl_sessions/958f11109b1c4a183934f5e50e0c76b8" for ::1 at 2020-03-21 19:41:33 -0300
Started PUT "/__web_console/repl_sessions/958f11109b1c4a183934f5e50e0c76b8" for ::1 at 2020-03-21 19:41:38 -0300
Started PUT "/__web_console/repl_sessions/958f11109b1c4a183934f5e50e0c76b8" for ::1 at 2020-03-21 19:41:47 -0300

Мой контроллер is:

class ClientsController < ApplicationController


  def create
    @client = Client.new(client_params)
    if @client.save
      redirect_to clients_path
    else
      render :new
    end
  end

  private

  def client_params
    params.require(:nome).permit(:sobrenome, :nacionalidade)
  end

end

Моя модель:

class Client < ApplicationRecord
  attr_accessor :nome, :sobrenome, :nacionalidade, :asd, :nome, :genero, :nome, :sobrenome, :nacionalidade, :estadocivil, :capacidade, :profissao, :empresa_atual, :nascimento, :nome_mae, :nb, :rg, :cpf, :email, :endereco, :cidade, :estado, :dados_bancarios, :cep, :telefone, :notas
  validates :nome, presence: true
end

Мои маршруты:

Rails.application.routes.draw do
  get 'pages/home'
  root to: 'pages#home'
  resources :clients
end

Представления SimpleForm / клиенты / _form. html .erb и новые . html .erb:

<%= simple_form_for @client do |f| %>
  <%= f.input :genero, label: 'Gênero' %>
  <%= f.input :nome, label: 'Nome' %>
  <%= f.input :sobrenome, label: 'Sobrenome' %>
  <%= f.input :nacionalidade, label: 'Nacionalidade' %>
  <%= f.input :estadocivil, label: 'Estado Civil' %>
  <%= f.input :capacidade, label: 'Capacidade' %>
  <%= f.input :profissao, label: 'Profissão' %>
  <%= f.input :empresa_atual, label: 'Empresa Atual' %>
  <%= f.input :nascimento, label: 'Data de Nascimento' %>
  <%= f.input :nome_mae, label: 'Nome da Mãe' %>
  <%= f.input :nb, label: 'Número de Benefício' %>
  <%= f.input :rg, label: 'Número de RG' %>
  <%= f.input :cpf, label: 'CPF' %>
  <%= f.input :email, label: 'E-mail' %>
  <%= f.input :endereco, label: 'Endereço' %>
  <%= f.input :cidade, label: 'Cidade' %>
  <%= f.input :estado, label: 'Estado' %>
  <%= f.input :dados_bancarios, label: 'Dados Bancários' %>
  <%= f.input :cep, label: 'CEP' %>
  <%= f.input :telefone, label: 'Telefone' %>
  <%= f.input :notas, label: 'Notas' %>
  <%= f.button :submit %>
<% end %>

<%= render 'form', client: @client %>

Даже когда я изменяю сильные параметры или что-то еще, параметры не go, все данные равны нулю.

1 Ответ

1 голос
/ 22 марта 2020

Проблема в методе client_params

Изменить client_params на:

def client_params
  params.require(:client).permit(:sobrenome, :nacionalidade)
end

params.require(:nome) ожидает, что params га sh имеет ключ nome это оборачивает другие параметры, которые вы хотите разрешить. Например:

{ nome: { sobrenome: "", nacionalidade: "" }}. That's not your case based on your form.

Когда вы добавляете simple_form_for @client, rails создает html тегов ввода с атрибутом name следующим образом:

<input type="text" name="client[genero]">`
<input type="text" name="client[sobrenome]">`.
<!-- etc -->

Так что в вашем контроллере разрешить genero, sobrenome вам нужно требовать client, но не nome.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...