Недопустимые параметры: вложенные формы - PullRequest
0 голосов
/ 04 декабря 2018

может кто-нибудь проверить мой код ниже.

У меня есть форма с вложенной формой, и я все время получаю информацию о «Непозволенных параметрах»: as:

Unpermitted parameters: :item_custom_inputs_attributes, :item_custom_select_inputs_attributes, :item_custom_date_inputs_attributes
Unpermitted parameters: :item_custom_inputs_attributes, :item_custom_select_inputs_attributes, :item_custom_date_inputs_attributes
Unpermitted parameters: :item_custom_inputs_attributes, :item_custom_select_inputs_attributes, :item_custom_date_inputs_attributes
Unpermitted parameters: :item_custom_inputs_attributes, :item_custom_select_inputs_attributes, :item_custom_date_inputs_attributes

Здесьтакже значения параметров в контроллере:

<ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"XV038rd3aC43ZGw18MZlTxlho3IdsUPJlD/azWfBKdDgakbY/rmRqeNTjRv4KAczi5LMcClZA41xav5HMYOnzw==", "account_show_update_button"=>"true", "item"=><ActionController::Parameters {"name"=>"Bags & Backpacks", "found_at_date"=>"2018-11-27", "show_found_date"=>"1", "found_at_time"=>"10:33:22.000", "show_found_time"=>"1", "expiration_date"=>"2018-12-27","item_storage_location_id"=>"", "show_image"=>"0", "category_id"=>"3", "tag_list"=>"", "description"=>"", "internal_notes"=>"", "item_custom_inputs_attributes"=><ActionController::Parameters {"11"=>{"data"=>"text data eeeeeeeeeeee"}, "8"=>{"data"=>""}} permitted: false>, "item_custom_select_inputs_attributes"=>{"7"=>{"data"=>"9"}}, "item_custom_date_inputs_attributes"=>{"4"=>{"data"=>""}}} permitted: false>, "commit"=>"Update", "q"=>{"state_eq"=>"queued", "view_type"=>"list"}, "controller"=>"items", "action"=>"update", "venue_permalink"=>"asgardia", "id"=>"667"} permitted: false>

Разрешение контроллера для одного из недопустимых параметров:

def item_params
    params.require(:item).permit(
      :name, :found_at_date, :found_at_time, :description, :internal_notes, :show_found_date, :show_found_time,
      :show_image, :image, :category_id, :expiration_date, :claim_form, :location, :flagged, :archive_reason_id,
      :tag_list, :item_storage_location_id, :is_active, item_custom_inputs_attributes: []
    )

      end

Модели:

class Item < ApplicationRecord
  has_many :item_custom_inputs
  accepts_nested_attributes_for :item_custom_inputs, allow_destroy: true
end

class ItemCustomInput < ApplicationRecord
    belongs_to :item_custom_field
    belongs_to :item
end

Вложенные поля формы:

<% @venue.get_custom_logging_fields_without_section.each do |field| %>
    <% field_type = field.class.name if field.present? %>
    <div class="form-group">
        <% if field_type == "ItemCustomField" %>
            <label><%= field.title if field.title.present? %></label> 
            <input type="text" name="item[item_custom_inputs_attributes][<%=field.id %>][data]", value= "<%= field.item_custom_input.data if field.item_custom_input.present? %>", id="item_item_custom_inputs_attributes_<%= field.id %>_data", class="form-control" />

        <% elsif field_type == "ItemCustomDateField" %>
            <label><%= field.title + " DATE" %></label>
            <input type="date" name="item[item_custom_date_inputs_attributes][<%=field.id %>][data]", value= "<%= field.item_custom_date_input.data if field.item_custom_date_input.present? %>", id="item_item_custom_date_inputs_attributes_<%= field.id %>_data", class="form-control" />

            <label><%= field.title + " TIME" %></label>
            <input type="time" name="item[item_custom_date_inputs_attributes][<%= field.id %>][data]", class="form-control", step: 1 />

        <% elsif field_type == "ItemCustomSelectField" %>
            <label><%= field.title if field.title.present? %></label> 
            <%= select_tag "item[item_custom_select_inputs_attributes][#{field.id}][data]", options_from_collection_for_select(field.item_custom_select_values, :id, :name), class: "form-control" %>
        <% end %>

    </div>
<% end %> 

Очевидно, я что-то упускаю, но не могу найти что.Я пробовал с другой комбинацией в формате разрешения item_params для "item_custom_inputs_attributes", но ничего не работает.

1 Ответ

0 голосов
/ 04 декабря 2018

Когда вы используете вложенные атрибуты, вы должны использовать form.fields_for, и если модель item_custom_inputs имеет атрибуты, вы должны разрешить в вашем контроллере:

def item_params
   params.require(:item).permit(
     ...,
     item_custom_inputs_attributes: [:attr1, :attr2]
  )
end

Хороший пример, чтобы понять, что вложенные формы могут бытьоснован по следующей ссылке: https://www.pluralsight.com/guides/ruby-on-rails-nested-attributes

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