2017-06-29 50 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' - 因此是错误信息。 –

相关问题