我正在尝试在表格列“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]
感谢您的帮助!
答案 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实例的属性,用于保存“女性”值