无法使用插值实例变量渲染部分

时间:2013-04-02 16:23:12

标签: ruby-on-rails spree

我正在尝试在表格列“group”设置为“women”的产品页面上呈现部分内容。

在products_controller.rb中我有:

@subnav = Spree::Product.find(params[:group])

然后在产品#show中我有:

<div class="subnav">
 <%= render "spree/shared/#{@subnav}_subnav" %>
</div><!--subnav -->

因此,当产品具有“女性”组时,它应该呈现“spree / shared / women_subnav”。但我得到一个“Spree / products#show中的ActionView :: MissingTemplate”错误,说

 "Missing partial spree/shared/_subnav with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :rabl], :versions=>[:v1]}.

因此,由于某种原因,它甚至无法识别变量的存在。

我也试过

 @subnav = params[:group]

 @subnav = Product.find(params[:group]

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您有此错误,因为在<%= render "spree/shared/#{@subnav}_subnav" %>中,@subnav为空或空白。 它是空白的,因为params[:group]为空或空白。它是空白的,因为params没有:group键。

您的网址为pants.telegraphbranding.com/products/:id

这意味着params只有一个键:id

如果要访问组,则必须定义如下路线:

pants.telegraphbranding.com/groups/:group_id/products/:id

或直接在网址中传递该群组:pants.telegraphbranding.com/products/123?group_id=456

接下来,你可以写

@subnav = Spree::Product.find(params[:group_id])

答案 1 :(得分:0)

根据评论,您没有将组params传递给url中的服务器。

 @subnav = Spree::Product.find(params[:group]) 

这里@subnav将为nil,字符串插值用空字符串替换“#{@ subnav}”。

同样@subnav将是ActiveRecord的实例而不是字符串,因此您需要调用必需的属性,该属性将返回字符串(在您的情况下为“women”)。

在呈现部分处理零值之前,还要注意检查@subnav的值

喜欢

<% unless @subnav.nil? %>
<div class="subnav">
 <%= render "spree/shared/#{@subnav.name}_subnav" %>
</div><!--subnav -->
<% end %>

假设name是ActiveRecord实例的属性,用于保存“女性”值