未定义的局部变量或方法`product'for#&lt;#<class:0x007fe77c4f3c68>:0x007fe77c69cb78&gt;

时间:2016-08-28 19:50:23

标签: ruby-on-rails ruby ruby-on-rails-4 undefined

我的构建应用程序出现问题。

products/show.html.erb中的

我有这个代码将产品添加到购物车。

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

它总是给我这个错误undefined local variable or method 'product' for #<#<Class:0x007fe77c4f3c68>:0x007fe77c69cb78> 这个错误发生在第一行根据Better Error gem

我正在使用ActiveAdmin,但我很确定错误没有出现因为这个。

我不确定为什么会发生这种情况,对我而言,代码似乎很好,但我必须监督某些事情。

如果有人可以看一眼,也许看到我没看到的东西,那就太好了。

这是`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

这是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

这是routes.rb文件

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'

1 个答案:

答案 0 :(得分:2)

视图只能使用实例变量。

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

您的观点:

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

您应该能够将对象传递给_path助手。