0

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

在 products_controller.rb 我有:

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

然后在 products#show 我有:

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

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

 "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]

谢谢你的帮助!

4

2 回答 2

1

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

你的网址是pants.telegraphbranding.com/products/:id

这意味着 params 有一个键 : id

如果你想访问一个组,你必须定义一个这样的路由:

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

或者直接在 URL 中传递组:pants.telegraphbranding.com/products/123?group_id=456

接下来,你可以写

@subnav = Spree::Product.find(params[:group_id])
于 2013-04-02T16:54:26.683 回答
0

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

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

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

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

在渲染部分以处理 nil 值之前,还要注意检查 @subnav 的值

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

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

于 2013-04-02T16:50:47.923 回答