没有路由匹配{:action =>“show”,:controller =>“produits”,:id => nil}缺少必需的键:[:id]

时间:2017-06-29 08:21:26

标签: ruby-on-rails ruby routing

我的动作控制器url生成错误如下:

class ProduitsController < ApplicationController
  before_action :set_cart, only: [:create, :destroy]
  before_action :set_cart_item, only: [:destroy]

  def index
    @produits = Produit.order(:nom).to_a
    @produits = Produit.all
    @categories = Categorie.all.order("categories.created_at DESC")
  end

  def show
    @produit  = Produit.find(params[:id])
  end

  def add_to_cart
    if session[:cart_id].blank?
     cart = Cart.create(status: 'pending')
     session[:cart_id] = cart.id
   else
     cart = Cart.find(session[:cart_id])
   end

   produit = Produit.find(params[:id])
   cart.cartships.create(produit_id: produit.id, quantite: 1)
   redirect_to cart
  end

end

这里是index.html.erb

<div id="boutique-right">
    <div id="produits-column-container">
      <% if @produits %>
        <% @produits.in_groups_of(3, false).each do |group| %>
          <div id="produits-row-container">
            <% group.each do |produit| %>
            <div class="boutique-produit">
              <div>
                    <%= image_tag produit.photo %>
              </div>
              <div>
                <p><%= produit.nom %></p>
              </div>
              <div class="selection-action">
                <div>
                  <%= link_to 'Voir fiche produit', produit_path(@produit) %>
                </div>
                <div>
                  <%= number_to_currency(produit.prix, unit: '€', format: '%n%u') %>
                </div>
              </div>
              <div class="marche-quantite-increment-container">
                <!-- Increment/decrement method -->
                <div>—</div>
                <div>1</div>
                <div>+</div>
              </div>
              <div class="add-to-cart-home">
                <%= link_to 'Ajouter au panier' %>
              </div>
            </div>
            <% end %>
          </div>
        <% end %>
      <% end %>
    </div>
  </div>

然后,我有以下错误消息:

ActionController::UrlGenerationError in Produits#index

No route matches {:action=>"show", :controller=>"produits", :id=>nil} missing required keys: [:id]

这是routes.rb:

Rails.application.routes.draw do

  match "/mon-panier" => 'carts#index', via: :get
  resources :carts

  resources :produits, only: [:index, :show]

  match "/presse" => 'presses#index', via: :get

  match "/partenaires" => 'partenaires#index', via: :get

  match "/mon-profil" => 'profils#show', via: :get

  match "/commandes-produits-breton" => 'commandes#index', via: :ge

  match "/paiements" => 'paiements#index', via: :get

  resources :categories

  resources :order_abonnements, only: [:create, :update, :delete]

  get 'livraisons_type/index'

  match "/recapitulatif" => 'recapitulatif#index', via: :get

  match "/confirmation-carte-cadeau" => 'recapitulatif#confirmation', via: :get

  match "/livraison-carte-cadeau" => 'livraison_carte#index', via: :get

  match '/activation-carte' => 'code_carte_cadeau#index', via: :get

  match "/offrir-une-box-bretonne" => 'cadeau#index', via: :get

  match "/nos-box" => 'nos_box#index', via: :get

  get 'categories/index'

  devise_for :admin_users, ActiveAdmin::Devise.config
  ActiveAdmin.routes(self)

  match '/informations-penn-ar-box' => 'informations_penn_ar_box#index', via: :get

  match '/livraison-box-bretonne' => 'livraison_box_bretonne#index', via: :get

  match '/abonnements' => 'abonnements#index', via: :get

  devise_for :users, path: '', path_names: { sign_in: 'connexion', sign_out: 'déconnexion'}

  resources :users do
    delete 'déconnexion' => 'devise/sessions#destroy'
    resources :profil
  end

  root 'home#home'
end

我也无法访问产品展示视图,因为Rails找不到任何id =

的产品

1 个答案:

答案 0 :(得分:1)

您正在将@produit传递给路径助手。你应该在哪里通过produit

index.html.erb中更改此行将解决问题

<%= link_to 'Voir fiche produit', produit_path(@produit) %>

<%= link_to 'Voir fiche produit', produit_path(produit) %>
相关问题