ROR应用程序中未定义的局部变量或方法

时间:2017-08-04 00:53:03

标签: ruby-on-rails ruby

我在views/products/show.html.erb显示照片时遇到问题。我总是得到这个错误:

  

未定义的局部变量或方法'product'   <#:0x007fe0bc949fb8>
  你的意思是? @product

这是我用来在视图中显示照片的代码:

views/products/show.html.erb

   <div class="col-xs-12 col-sm-6 center-block" >
       <% product.images.each do |image_product| %>
        <%= image_tag image_product.image.url(:medium), class: "img-responsive" %>
       <% end %>
   </div>

这是show的{​​{1}}方法,就像我在收到错误消息后添加products_controller.rb之后的那样。

@products

这是class ProductsController < ApplicationController before_action :set_product, only: [:show, :edit, :update, :destroy] def show @products = Product.all end private # Use callbacks to share common setup or constraints between actions. def set_product @product = Product.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def product_params params.require(:product).permit(:title, :description, :price_usd, :image, :category_id, :stock_quantity, :label_id, :query, :slug, images_attributes: [:image , :id , :_destroy]) end end 模型

product.rb

这是class Product < ActiveRecord::Base acts_as_list :scope => [:category, :label] belongs_to :category belongs_to :label has_many :images accepts_nested_attributes_for :images has_many :product_items, :dependent => :destroy end 模型

image.rb

我不确定为什么我会收到此错误,有人可以提出建议吗?

2 个答案:

答案 0 :(得分:2)

使用实例变量 @product 代替产品

product 是一个局部变量,因此在显式共享为局部变量之前不能在show文件中使用。

答案 1 :(得分:1)

你的show方法中有两个不同的变量,但是你没有使用它们,就像你正在做product.images一样,这意味着在某个地方有一个局部变量,如果你想从中获取图像在特定记录中,您可以使用私有方法@product中设置的set_product变量,并在不需要时删除@products = Product.all

尝试使用以下内容:

<% @product.images.each do |image_product| %>
  <%= image_tag image_product.image.url(:medium), class: "img-responsive" %>
<% end %>