我正在建立一个销售各种男士和女士服装的小型电子商务网站。我想根据用户所在的分类来呈现部分内容。例如,如果用户在 mysite.com/t/women/pants 我想呈现 _women.html.erb,或者,如果用户是在 mysite.com/t/men/shirts 我想渲染 _men.html.erb。
我有一个分类模型 has_many taxon,而分类模型 has_many products。
在 taxons_controller.rb 我有:
def show
@taxon = Taxon.find_by_permalink(params[:id])
return unless @taxon
@taxonomy = Spree::Taxonomy.all
@taxon_title = Spree::Taxon.all
@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
respond_with(@taxon)
end
在 taxons#show 我有:(我知道这是错误的)
<% @taxon_title.each do |title| %>
<% @taxonomy.each do |taxonomy| %>
<% if title.name == taxonomy.name %>
<%= render "spree/shared/#{title.name.downcase}" %>
<% end %>
<% end %>
<% end %>
当我访问 mysite.com/t/women/long-sleeve 时,rails 调试器显示:
controller: spree/taxons
action: show
id: women/long-sleeve
如何访问内部操作的 id,以便在控制器/视图中执行以下操作:
'如果 id 等于 'women' 渲染“spree/shared/#{title.name.downcase}”'
title 是分类的名称?
我想我需要 find(params[:something] 在控制器的显示动作中,但我对 params 有点不清楚。
* * * @beck03076 这是一个很棒的技巧。非常感谢你。但它仍然无法正常工作。
在我的控制器中,我放了:
@taxon_id = Spree::Taxon.find(params[:id])
然后在我提出的行动中:
如果@taxon_id == params[:id] 渲染'spree/shared/women'
当我加载页面时,它显示“您要查找的页面不存在”。我的部分在正确的目录中。我的语法正确吗?
我的参数是:
{"controller"=>"spree/taxons", "action"=>"show", "id"=>"women/long-sleeve"}
再次感谢您的帮助!