我在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
我不确定为什么我会收到此错误,有人可以提出建议吗?
答案 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 %>