2017-06-29 78 views
-1

我有一個動作控制器url生成錯誤,如下所示:沒有路由匹配{:action =>「show」,:controller =>「produits」,:id => nil}缺少必需的鍵:[:id]

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

你傳入@produit的路徑幫手。凡爲你應該通過produit

index.html.erb更改此線將解決這一問題

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

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

感謝@DeepakMahakale它的伎倆! – justinedps26

+1

詳細說明:'@ produits'已設置,並且您正在執行:'@produits.each do | produit | ...'。另一方面,'@ produit'沒有被設置爲任何東西,因此'nil' - 因此是錯誤信息。 –

相關問題