Rails не может удалить проблему с Javascript - PullRequest
0 голосов
/ 01 марта 2019

Я видел множество постов по этой проблеме, но ни один из них не помог.Как и многие люди, я пытаюсь создать ссылку для удаления.Когда у меня были Turbolinks, у меня не было проблем с этими ссылками, за исключением того, что из-за Turbolinks мои страницы не могли загружаться должным образом.Я удалил его, и теперь я пытаюсь исправить свои ссылки.

Вот мой шаблон: _cart_row_html.erb

      <%= simple_form_for order_item, authenticity_token: true, remote: true do |f| %>
    <td><%= product.reference %></td>
    <td><%= product.name %></td>
    <td><%= f.number_field :quantity, value: order_item.quantity.to_i, class: "form-control", min: 1 %></td>
    <td><%= f.button :submit, "Mettre à jour la quantité", class: "btn btn-primary" %></td>
    <td><%= link_to '<i class="fas fa-trash"></i>'.html_safe, 'data-method' => :delete %> </td>
    <td><%= number_to_currency order_item.total_price, locale: :fr %></td>
  <% end %>

Мои маршруты.rb:

  Rails.application.routes.draw do
  root to: "home#index"
  devise_for :users, controllers: { registrations: "registrations",  sessions: "sessions" }
  resource :cart, only: [:show]
  resources :order_items, only: [:create, :update, :destroy]
  resources :categories
  resources :products
  get 'orders/validate_cart', as: 'validate_cart'
  get 'orders/validate_coordinates', as: 'validate_coordinates'
  #get 'order_items/create'
  #get 'order_items/update'
  #get 'order_items/destroy'
  get 'carts/show'
  get '/articles/:category', to: 'articles#index', as: 'list_product_by_category'
  get '/articles/:categories/:id', to: 'articles#show', as: 'product_detail'
  get '/users', to: 'users#index',  as: 'users_list'
  get 'dashboard' => 'dashboard#index'
end

Мой application.js:

//= require jquery3
//= require rails-ujs
//= require activestorage
//= require popper
//= require bootstrap-sprockets
//= require akame.bundle

И, наконец, мой oder_items_controller.rb

class OrderItemsController < ApplicationController
  def create
    @order = current_order
    @order_item = @order.order_items.new(order_item_params)
    @order.save
    session[:order_id] = @order.id
    redirect_to request.referrer
  end

  def update
    @order = current_order
    @order_item = @order.order_items.find(params[:id])
    @order_item.update_attributes(order_item_params)
    @order_items = @order.order_items
    @order.save
    redirect_to request.referrer, notice: "La quantité a bien été mise à jour"
  end

  def destroy
    @order = current_order
    @order_item = @order.order_items.find(params[:id])
    @order_item.destroy
    @order_items = @order.order_items
    if @order_items.length <=0
      reset_session
      redirect_to carts_show_path
    else
      redirect_to carts_show_path, notice: "Le produit a bien été supprimé"
    end
  end

  private

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

До сих пор я пробовал все эти решения: - Заменить метод на метод данных - Использовать <%= javascript_include_tag :application %> в мой файл application.html.erb - Проверьте, есть ли

//= require jquery3
//= require rails-u

в моем application.js

с помощью этих сообщений, например: Я не могуудалить сообщение в Rails Невозможно отредактировать или удалить Javascript в Rails

РЕДАКТИРОВАТЬ: когда я использую этот путь <td><%= link_to '<i class="fas fa-trash"></i>'.html_safe, order_item_path(@order_item), 'data-method' => :delete %> </td> У меня появляется эта ошибка: "Нет совпадений маршрутов {:action => "update",: controller => "order_items",: id => nil}, пропущены необходимые ключи: [: id] "

Чего мне не хватает?Это сводит меня с ума уже несколько дней ...

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я изменил свой код на <%= link_to '<i class="fas fa-trash"></i>'.html_safe, order_item_path(order_item), 'data-method' => :delete %>, и он работает, даже если я почти уверен, что проверял это раньше.В любом случае, я рад, что это работает.Я голосую за ваш ответ.Спасибо!

0 голосов
/ 01 марта 2019

В вашем

<%= link_to "Ajouter au panier", order_item_path(@order_item), class: "btn btn-primary" %>

Ваш путь должен выглядеть следующим образом order_item_path(@order_item), method: :delete, поэтому вы указываете на действие уничтожения.Выглядит так, как будто вы используете @order_item и это ноль, в вашем _cart_row.html.haml у вас есть локальная переменная order_item, поэтому вам, вероятно, следует использовать ее.

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

...