我的动作控制器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 =
的产品答案 0 :(得分:1)
您正在将@produit
传递给路径助手。你应该在哪里通过produit
在index.html.erb
中更改此行将解决问题
<%= link_to 'Voir fiche produit', produit_path(@produit) %>
到
<%= link_to 'Voir fiche produit', produit_path(produit) %>