1

我有一个页面列出了许多产品,在 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
4

0 回答 0