Rails модальная форма не отправляет все параметры - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть модальная форма с двумя вариантами выбора

<%= form_with(model: @product_variant_option,  remote: request.xhr?, html: {data: {modal: true}}) do |f| %>
    <div class="modal-body">
      <div class="row">

        <div class="form-group col-sm-4">
          <%= f.label :product_option_id %>
          <%= f.collection_select :product_option_id, ProductOption.all.order("key"), :id, :key, {}, {:onchange => "on_modal_option_change(this)", :class => 'custom-select'} %>
        </div>
        <div class="form-group col-sm-4">
          <%= f.label :product_option_value_id %>
          <%= f.collection_select :product_option_value_id, ProductOptionValue.all.order("name"), :id, :name, {}, { :class => 'custom-select'} %>
        </div>
        <div class="form-group col-sm-1">
          <%= f.hidden_field :product_variant_id %>
        </div>
      </div>
    </div>
    <div class="modal-footer">
      <%= submit_tag("Save", class: "btn btn-primary") %>
    </div>
<% end %>


В моем контроллере я только хочу создать

class ProductVariantOptionsController < ApplicationController
  respond_to :html, :json
  #before_action :set_product_variant_option, only: [:show, :edit, :update, :destroy]
  def new
    @product_variant_option = ProductVariantOption.new
    @product_variant_option.product_variant_id = params[:product_variant_id]
    respond_modal_with @product_variant_option
  end

  def create
    @product_variant_option = ProductVariantOption.new(pvo_params)
    respond_to do |format|
      if @product_variant_option.save
        format.html {redirect_to '/product_variants/'+@product_variant_option.product_variant_id.to_s + '/edit', notice: 'Option was successfully created.'}
        format.json {render :show, status: :created, location: @product_type}
      else
        format.html {render :new}
        format.json {render json: @product_type.errors, status: :unprocessable_entity}
      end
    end
  end

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

  # Only allow a trusted parameter "white list" through.
  def pvo_params
    params.require(:product_variant_option).permit(:product_variant_id, :product_option_id, :product_option_value_id)
  end

end

, как вы видите, также product_option_value_id находится в белом списке

Однако при выполнении запроса product_option_value_id всегда пуст, это принимается на стороне сервера

{"utf8"=>"✓", "authenticity_token"=>"dc4hyqovio2Q84RlwFHzwzYaKHM/Pc9UBLbZLWQewSJ4+UCGxZck5qRsWhgcJVtXyVkOL9vI+KR4nuJbylUAJA==", "product_variant_option"=><ActionController::Parameters {"product_option_id"=>"3", "product_option_value_id"=>"", "product_variant_id"=>"1"} permitted: false>, "commit"=>"Save", "controller"=>"product_variant_options", "action"=>"create"}

Что вызывает то, что не все параметры отправляются на сервер?

1 Ответ

0 голосов
/ 19 сентября 2019

Я ничего не знаю об этой модальной форме, которую вы используете, но предполагаю, что on_modal_option_change(this), который вы имеете в своем событии изменения для product_option_id, добавляет его к какой-то базовой форме, и потому что вы нев поле product_option_value_id оно не добавляется.

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