Ошибка ParameterMissing: обновить запись в ruby ​​на рельсах? - PullRequest
0 голосов
/ 20 января 2019

Я хотел бы обновить count: = count-1 для продукта. Я использовал редактирование вместо обновления, потому что я хотел бы пропустить форму. Я также перечислил маршрут, сгенерированный системой.

Вот ошибка: «ActionController :: ParameterMissing в ProductsController # edit»

Product_controller.rb

def edit
  @product = Product.find(params[:id])
  if @product.update(product_params)
    render json: { status: :ok, message: 'Product updated ', data: @product }
  else
    render json: { status: :error, message: 'Product not available', data: @product }
  end
end

private
  def product_params
    params.require(:product).permit(:title, :price, :count)
  end

edit.html.erb

      <%= form_with(model: @product, local: true) do |form| %>

      <% if @product.errors.any? %>
      <div id="error_explanation">
      <h2>
          <%= pluralize(@product.errors.count, "error") %> prohibited
    this product from being saved:
     </h2>
      <ul>
         <% @product.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
       <% end %>
      </ul>
     </div>
  <% end %>

  <p>
     <%= form.label :title %><br>
     <%= form.text_field :title %>
   </p>

  <p>
     <%= form.label :price %><br>
     <%= form.text_field :price %>
   </p>

   <p>
     <%= form.label :count %><br>
     <%= form.text_field :count %>
   </p>

   <p>
     <%= form.submit %>
 </p>

 <% end %>

Маршруты:

    welcome_index_path  GET /welcome/index(.:format)    welcome#index

    products_path   GET /products(.:format) products#index

    POST    /products(.:format) products#create

    new_product_path    GET /products/new(.:format) products#new

    edit_product_path   GET /products/:id/edit(.:format)    products#edit

    product_path    GET /products/:id(.:format) products#show

    PATCH   /products/:id(.:format) products#update

    PUT /products/:id(.:format) products#update

    DELETE  /products/:id(.:format)  products#destroy

Ответы [ 2 ]

0 голосов
/ 20 января 2019

для обновления записи вы можете использовать метод обновления

Product_controller.rb

def edit
  @product = Product.find(params[:id])
end

def update
  # use update method
  @product = Product.find(params[:id])
  # you can count down here
  @product.count = @product.count - 1
  # use update_attributes to update the record
  if @product.update_attributes(product_params)
    render json: { status: :ok, message: 'Product updated ', data: @product }
  else
    render json: { status: :error, message: 'Product not available', data: @product }
  end
end

private
  def product_params
    params.require(:product).permit(:title, :price, :count)
  end
0 голосов
/ 20 января 2019

Если вы получаете «ActionController :: ParameterMissing в ProductsController # edit», то это сигнал от strong_params о том, что требуемый параметр отсутствует в ваших параметрах.

Ваш обязательный параметр: product, поэтому вы должны ожидать, что ваши параметры будут иметь что-то вроде: product: {some_key: :some_value}

Проверьте ваши параметры в действии редактирования перед вызовом для обновления с помощью оператора put или binding.pry, например params.inspect

(также примечание, если это ваше действие, когда вы обновляете объект, тогда это действие должно называться «обновить», а не «редактировать»)

Это звучит как проблема с вашим представлением - вы, вероятно, неправильно отформатировали form_for и, следовательно, параметры не отформатированы правильно, поступая в ваш контроллер. Было бы лучше включить ваш код представления в этот вопрос также. Для справки о том, как отформатировать form_for проверьте https://api.rubyonrails.org/v5.1/classes/ActionView/Helpers/FormHelper.html

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