2016-08-28 1 views
0

Ich habe ein Problem mit einer App, die ich gerade erstelle.undefinierte lokale Variable oder Methode `Produkt 'für # <# <Klasse: 0x007fe77c4f3c68>: 0x007fe77c69cb78>

in products/show.html.erb Ich habe diesen Code, um das Produkt in den Warenkorb legen.

<%= button_to product_items_path(product_id: product) do %> 
     <i class="fa fa-shopping-cart"></i>Add to Cart 
<% end %> 

Und es gibt mir immer diesen Fehler undefined local variable or method 'product' for #<#<Class:0x007fe77c4f3c68>:0x007fe77c69cb78> Dieser Fehler wird in der ersten Zeile geschieht nach besseren Fehler gem

Ich bin mit ActiveAdmin aber ich bin mir ziemlich sicher, dass der Fehler ist nicht erscheinen deswegen.

Ich bin nicht sicher, warum das passiert, mir scheint der Code gut, aber ich muss etwas beaufsichtigen.

Es wäre toll, wenn jemand mal gucken könnte und vielleicht sehen würde, was ich nicht sehe.

Dies ist die `ProductItemsController.rb``

class ProductItemsController < ApplicationController 

include CurrentCart 

before_action :set_cart, only: [:create] 
before_action :set_product_item, only: [:show, :destroy] 

def create 
    product = Product.find(params[:product_id]) 
    @product_item = @cart.add_product(product.id) 
    if @product_item.save 
     redirect_to root_url, notice:'Product added to Cart' 
    else 
     render :new 
    end 
end 

private 

def set_product_items 
    @product_item = ProductItem.find(params[:id]) 
end 

def product_item_params 
    params.require(:product_item).permit(:product_id) 
end 

end 

Und hier ist der ProductsController.rb

class ProductsController < ApplicationController 
before_action :set_product, only: [:show, :edit, :update, :destroy] 


    def show 

    end 

private 

def set_product 
    @product = Product.find(params[:id]) 
end 

def product_params 
    params.require(:product).permit(:name, :description, :price_usd, :price_isl, :image, :category_id) 
end 

Ende

dies die routes.rb Datei

Rails.application.routes.draw do 

resources :categories 
resources :labels 
resources :products 

resources :carts 
resources :product_items 

devise_for :admin_users, ActiveAdmin::Devise.config 
    ActiveAdmin.routes(self) 
    root 'pages#index' 
+2

Es muss eine Instanzvariable sein, auf die über die Ansicht zugegriffen werden kann. ('@ Produkt' statt' Produkt' an beiden Stellen) – Ven

Antwort

2
ist

Für die Ansicht sind nur Instanzvariablen verfügbar.

def create 
    @product  = Product.find(params[:product_id]) # Prefix variable name with @ 
    @product_item = @cart.add_product(product.id) 

    if @product_item.save 
     redirect_to root_url, notice:'Product added to Cart' 
    else 
     render :new 
    end 
end 

Und Ihre Ansicht:

<%= button_to product_items_path(@product) do %> 
    <i class="fa fa-shopping-cart"></i>Add to Cart 
<% end %> 

sollten Sie in der Lage sein, nur an den _path Helfer in das Objekt zu übergeben.

Verwandte Themen