Button_to указывает на то, что метод исправления / обновления не работает - PullRequest
0 голосов
/ 11 октября 2018

То, что я пытаюсь сделать, это кнопка_, которая указывает на патч (обновление?) Внутри моего контроллера, но он не работает.Это мой код.

        <div>
    <%= product.picture? ? image_tag(product.picture_url, :alt => product.name) : image_tag("https://via.placeholder.com/250x250") %>
    Product: <%= product.name %><br />
    Description: <%= product.description %><br />
    Price: <%= humanized_money_with_symbol(product.price) %><br />
    Venduto da: <%= product.user.email %><br />
    <%= button_to "Remove", {controller: "orders", action: 'remove', :id => product.id}, :method=>:patch %>
    </div>

в методе обновления, предполагая, что я заставлю его работать рано или поздно, я должен вставить логику для удаления товара из самого заказа.На данный момент, если я перехожу на страницу просмотра внутри index.html.erb, которая содержит список заказа для оплаты внутри соответствующих продуктов.Заказ в моем случае - это своего рода корзина.Я получаю эту ошибку:

Не найдено ни одного маршрута {: action => "remove",: controller => "orders",: id => 456}

это мои маршруты:

    Rails.application.routes.draw do
  root to: 'pages#home'
  devise_for :users
  resources :products
  resources :orders, only: [:show, :create, :index, :destroy, :patch]

  require "sidekiq/web"
  authenticate :user, lambda { |u| u.admin } do
    mount Sidekiq::Web => '/sidekiq'
  end
end

Как вы можете видеть, я добавил: patch patch, но он все равно не работает.Я думаю, что проблема в первую очередь в моих маршрутах ... У меня есть несколько вопросов сейчас.1: Если я хочу создать помощника link_to или button_to для выполнения метода, отличного от обычной операции crud, нужно ли мне создавать маршрут к этому пользовательскому методу?Можете ли вы сделать пример в случае?2: в моем случае я делаю пост, запрос на получение или патч?(я пытаюсь с патчем, потому что я обновляю свой заказ, так что я думаю, что я должен вставить логику, чтобы удалить продукт внутри заказа) документация по rails отличная, но насчет маршрутизации, я очень запуталсяв настоящий момент, как только я хочу сделать что-то из схем, я застреваю дни, пытаясь заставить это работать.3: может кто-то связать меня с хорошим руководством с примерами, чтобы понять маршрутизацию?Спасибо.

ОБНОВЛЕНИЕ Я нашел решение:

<%= button_to("Remove", {:controller => "orders", :action => "update", :id => product.id}, :method => :patch) %>

и добавил в маршрут следующее:

  patch '/orders', action: :update, controller: 'orders'

сейчас это работает, но у меня все еще есть сомнения по поводупочему это работает: /

1 Ответ

0 голосов
/ 11 октября 2018

Вкратце: измените action: 'remove' на action: 'destroy'.

Большинство браузеров поддерживают только GET , POST , OPTION , но вседругие методы эмулируются Rails с использованием скрытого поля формы _method .

Когда вы говорите method: 'patch', это означает, что в request.method в методе вашего контроллера это будет patch, но если вы хотите указать точный метод в контроллере, вы должныиспользуйте action

Надеюсь, что это поможет:)

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