根据操作的ID渲染rails部分
我正在建立一个小型电子商务网站,销售各种男装和女装。 我想基于用户所在的分类法来呈现部分内容。例如,如果用户位于mysite.com/t/women/pants,我想呈现_women.html.erb,或者,如果用户是在mysite.com/t/men/shirts我想呈现_men.html.erb。
我有一个分类模型,包含多个分类,而Taxon模型有多个产品。
在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
在分类单位#show我有:(我知道这是错的)
当我访问mysite.com/t/women/long-sleeve时,rails调试器显示:
controller: spree/taxons action: show id: women/long-sleeve
如何在内部访问动作的id,以便在控制器/视图中我可以执行以下操作:
‘如果id等于’女’渲染“spree / shared /#{title.name.downcase}”’
title是分类标准的名称?
我想我需要在控制器的演出动作中找到(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”}
再次感谢你的帮助!
每当你不清楚params时,只需将下面的行放在动作中并执行动作即可。
p "****************************" p params p "****************************"
现在,转到启动服务器的终端。
找到那两个“ * ** * ** * ”,它们之间的所有东西都是参数。
params基本上是一个ruby哈希。
例:
params看起来像这样,{:controller =>“hello”,:action =>“bye”,:id => 7,:others =>“OK”}
在您的控制器中访问id,使用params [:id]。(= 7)
访问其他人,使用params [:others]。(=“OK”)