我有一个页面列出了许多产品,在 taxons#show。在 taxons#show 内部,我正在渲染部分 _products.html.erb 以显示产品、图像、变体等。默认情况下,当您单击 taxons#show rails 上的单个产品时,会将您重定向到 products#show 页面,其中渲染部分 _cart_form.html.erb 显示添加到购物车选项。
但是,我正在尝试将 _cart_form.html.erb 呈现在 _products.html.erb 中的灯箱内,该灯箱位于 taxons#show 内。我的问题是 _products.html.erb 正在使用
<% products.each do |product| %>
显示每个单独的产品。_cart_form.html.erb 使用 @product 来显示其所有产品信息。如果我保持这种方式,我会收到 nilClass 的 NoMethod 错误,因为未定义 @product。
然后我尝试了:
<% @product = product %>
<%= render 'spree/shared/cart_form' %>
但是因为这是在分类单元上输出所有产品的代码#show 上面的代码,它会将 _product.html.erb 中的每个产品更改为相同的产品,即列出的第一个产品。
如何在每个单独的产品的灯箱内呈现 _cart_form.html.erb?
这是taxons_controller.rb:
def show
@taxon = Taxon.find_by_permalink(params[:id])
return unless @taxon
@taxon_id = params[:id].split('/').first
if @taxon_id
instance_variable_set "@enable_#{@taxon_id}", true #big lettered taxonomy heading
end
@product_type = params[:id].split('/').last
@featured = @taxon_id + '/' + @product_type #featured image
@searcher = Spree::Config.searcher_class.new(params.merge(:taxon => @taxon.id))
@searcher.current_user = try_spree_current_user
@searcher.current_currency = current_currency
@products = @searcher.retrieve_products
@related_products = @taxon.products.offset(rand(Spree::Product.count - 7)).limit(7)
respond_with(@taxon)
和 products_controller.rb:
def show
return unless @product
@variants = @product.variants_including_master.active(current_currency).includes([:option_values, :images])
@product_properties = @product.product_properties.includes(:property)
referer = request.env['HTTP_REFERER']
if referer
begin
referer_path = URI.parse(request.env['HTTP_REFERER']).path
# Fix for #2249
rescue URI::InvalidURIError
# Do nothing
else
if referer_path && referer_path.match(/\/t\/(.*)/)
@taxon = Taxon.find_by_permalink($1)
end
end
end
respond_with(@product)
end