Невозможно получить доступ к сильным параметрам из контроллера - PullRequest
0 голосов
/ 12 января 2019

Мое королевство за ответ на этот тупик. Мое приложение выдает ошибки от контроллера, что он не может найти параметр, который я передаю из представления. Я посмотрел больше в консоль и добавил несколько операторов put. Представление передает значения параметров правильно, и оба параметра перечислены в сильных параметрах, но контроллер не может их найти. Вот код и вывод журнала консоли.

Просмотр

<%= form_for @order_item, class: "form-control", remote: false do |f| %>
<div class="artist-event-item">
    <div class="row">
        <div class="artist-event-item-info col-sm-8">
            <h3>Ticket</h3>
            <ul class="row">
                <li class="col-sm-6">
                    <span>Venue</span>
                    <%= product.section.venue.address_street_number %> <%= product.section.venue.address_street_name %> 
                    <span class="location"><%= product.section.venue.address_city %>, <%= product.section.venue.address_state_code %></span>
                 </li>
                <li class="col-sm-6">
                    <span>Section</span>Section <%= product.section.name%> - <%=product.section.description %>
                </li>
            </ul>
        </div>
        <div class="artist-event-item-price col-sm-4">
            <span>Ticket Price</span>
            <strong><%= number_to_currency(product.price) %>
            </strong>
            <div class="input-group col-xs-2 center">
                <%= f.number_field :quantity, value: 0, min: 0, class: "select.form-group-sm    form-control" %>
                <%= f.hidden_field :product_id, value: product.id %>
                <%= f.button "Add to Cart", data: { remote: true, disable_with: "<i class = 'fa fa-spinner fa-spin'></i> Updating cart..." }, class: "btn btn-add-to-cart" %>
            </div>
        </div>
    </div>
</div>

Контроллер

private

def set_product

  puts "quantity is #{params[:quantity]}"
  puts "product id is #{params[:product_id]}"
  @product = @account.products.find(params[:product_id])
end

def order_item_params
  params.require(:order_item).permit(:quantity, :product_id)
end

конец

вывод с консоли рельсов

Started POST "/order_items" for 127.0.0.1 at 2019-01-11 16:42:36 -0400
Processing by OrderItemsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "order_item"=>{"quantity"=>"1", "product_id"=>"13"}, "button"=>""}
Account Load (1.1ms)  SELECT  "accounts".* FROM "accounts" WHERE "accounts"."subdomain" = $1 LIMIT $2  [["subdomain", "[FILTERED]"], ["LIMIT", 1]]
↳ app/controllers/application_controller.rb:19
CACHE Account Load (0.1ms)  SELECT  "accounts".* FROM "accounts" WHERE "accounts"."subdomain" = $1 LIMIT $2  [["subdomain", "[FILTERED]"], ["LIMIT", 1]]
↳ app/controllers/application_controller.rb:23`

quantity is 
product id is 
Completed 404 Not Found in 9ms (ActiveRecord: 1.2ms)
ActiveRecord::RecordNotFound (Couldn't find Product without an ID):
app/controllers/order_items_controller.rb:51:in set_product'

1 Ответ

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

Вы пытаетесь найти товар здесь:

@product = @account.products.find(params[:product_id])

Но, как вы видите, ваши параметры не включают params[:product_id]:

Parameters: {
  "utf8"=>"✓", 
  "authenticity_token"=>"[FILTERED]", 
  "order_item"=>{"quantity"=>"1", "product_id"=>"13"}, 
  "button"=>""
}

Вы можете сделать:

@product = @account.products.find(params[:order_item][:product_id])

Если :product_id в параметре :order_item именно тот, который вы ищете.

Вы также можете сделать:

@product = @account.products.find(order_item_params[:product_id])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...