我有一个列出许多产品的页面,在taxons#show。在taxons内部#show我正在渲染部分_products.html.erb以显示产品,图像,变体等。默认情况下,当您单击taxons上的单个产品时#show rails会将您重定向到产品#show page渲染部分_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