在另一部分内部渲染导轨

时间:2013-03-25 18:01:34

标签: ruby-on-rails

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

0 个答案:

没有答案