ActionController :: ParameterMissing и несколько выделенных строк в таблице - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь создать кнопку в представлении, которая создаст новую запись и отобразит ее в другом контроллере, а затем отобразит это представление.

Однако я получаю эту ошибку, когда нажимаю эту кнопку.

ActionController::ParameterMissing in JobHeadersController#create
param is missing or the value is empty: job_header

# Never trust parameters from the scary internet, only allow the white list through.
def job_header_params
  params.require(:job_header).permit(:company_id, :customer_id, :name, :del_address1, :del_address2, :del_address3, :del_address4, :del_postcode, :tel, :created_by)
end
end
Parameters:

{"utf8"=>"✓",
"authenticity_token"=>"BLAHBLAHBLAHg==",
"company_id"=>"2",
"customer_id"=>"1",
"name"=>"Nash Labs",
"del_address1"=>"23 Taylor Road",
"del_address2"=>"Odsal",
"del_address3"=>"Bradford",
"del_address4"=>"West Yorkshire",
"del_postcode"=>"BD6 1BH",
"tel"=>"07522189605",
"created_by"=>"2",
"button"=>""}

Код моего просмотра

 <%= form_tag({controller: "job_headers", action: "create"}, method: "post")  %>


  <% @other_assets.each do |assets| %>
    <tr>
      <td><%= check_box_tag 'selected_assets[]', assets.id%></td>
      <td><%= assets.service_type %></td>
      <td><%= assets.asset_type %></td>
      <td><%= assets.make %></td>
      <td><%= assets.model %></td>
      <td><%= assets.serial_no %></td>
      <td><%= format_date(assets.date_next) %></td>
      <td><%= link_to "Notes", customer_asset_service_register_path, :id => 'notesModal', "data-toggle" => "modal", 'data-target' => '.bs-example-modal-lg' %></td>

     </tr>
  <% end %>
 </table>


      </div>  
        <%= hidden_field_tag  :company_id, @customer.company_id %>
        <%= hidden_field_tag  :customer_id, @customer.id %>
        <%= hidden_field_tag  :name, @customer.name %>
        <% if @customer.del_address1.blank? %>
          <%= hidden_field_tag  :del_address1, @customer.address1 %>
        <% else %>
          <%= hidden_field_tag  :del_address1, @customer.del_address1 %>
        <% end %>
        <% if @customer.del_address1.blank? %>
          <%= hidden_field_tag  :del_address2, @customer.address2 %>
        <% else %>
          <%= hidden_field_tag  :del_address2, @customer.del_address2 %>
        <% end %>
        <% if @customer.del_address1.blank? %>
          <%= hidden_field_tag  :del_address3, @customer.address3 %>
        <% else %>
          <%= hidden_field_tag  :del_address3, @customer.del_address3 %>
        <% end %>
        <% if @customer.del_address1.blank? %>
          <%= hidden_field_tag  :del_address4, @customer.address4 %>
        <% else %>
          <%= hidden_field_tag  :del_address4, @customer.del_address4 %>
        <% end %>
        <% if @customer.del_address1.blank? %>
          <%= hidden_field_tag  :del_postcode, @customer.postcode %>
        <% else %>
          <%= hidden_field_tag  :del_postcode, @customer.del_postcode %>
        <% end %>

        <%= hidden_field_tag  :tel,  @customer.tel %>
        <%= hidden_field_tag  :created_by,  current_user.id %>

         <div class="box-tools pull-right">
            <%= button_tag(type: "submit", class: "btn btn-primary pull_right") do %>
                 <i class='fa fa-calendar'></i> Create Job
                  <% end %>

         <% end %>

Если я правильно читаю ошибку, то она ожидает параметр «job_header» и, тем не менее, она пуста, это означает создание новой записи job_header, и поэтому я не могу передать этот параметр?

Если кто-то также знает, как я могу поставить галочку напротив строк таблицы, чтобы выбранный идентификатор @other_asset передавался параметру в виде массива, пожалуйста, дайте мне знать. Это спасет меня от множества поисков.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

ActionController :: ParameterMissing в JobHeadersController # create

параметр отсутствует или значение пусто: job_header

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

params.require(:job_header).permit(:company_id, :customer_id, :name, :del_address1, :del_address2, :del_address3, :del_address4, :del_postcode, :tel, :created_by)

до

params.permit(:company_id, :customer_id, :name, :del_address1, :del_address2, :del_address3, :del_address4, :del_postcode, :tel, :created_by)
0 голосов
/ 01 сентября 2018

Rails way: Используйте form_for @job_header do |f| чтобы создать форму, ограниченную @job_header и в job_header_params будет:

{"utf8"=>"✓", "authenticity_token"=>"BLABLABLA",
  "job_header": { 
    "company_id"=>"2",
    "customer_id"=>"1",
    "name"=>"Nash Labs",
    "del_address1"=>"23 Taylor Road",
    "del_address2"=>"Odsal",
    "del_address3"=>"Bradford",
    "del_address4"=>"West Yorkshire",
    "del_postcode"=>"BD6 1BH",
    "tel"=>"07522189605",
    "created_by"=>"2"},
"button"=>""}

Исключение говорит о том, что требуемый узел (:job_header) отсутствует и может найти разрешенные параметры (params['job_header'] => nil).

Больше на https://api.rubyonrails.org/v5.1/classes/ActionView/Helpers/FormHelper.html

Обратите внимание на эти предметы, которые вы не получили: https://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html https://guides.rubyonrails.org/form_helpers.html

А если у вас уже есть информация для этих скрытых полей (в @customer), почему вы отправляете в представление, чтобы получить от него информацию «" »" ""? " (То же самое с «потому что пользователь может изменить эти данные путем проверки страницы и отправить вредоносный код ...) Заполните только эти атрибуты на контроллере.

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