根据操作的ID渲染rails部分

时间:2013-03-11 21:48:42

标签: ruby-on-rails model-view-controller params spree

我正在建立一个小型电子商务网站,销售各种男装和女装。我想基于用户所在的分类法来呈现部分内容。例如,如果用户位于mysite.com/t/women/pants,我想呈现_women.html.erb,或者,如果用户是在mysite.com/t/men/shirts我想呈现_men.html.erb。

我有一个分类模型,包含多个分类,而且分类模型有很多产品。

在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我有:(我知道这是错的)

    <% @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等于'女性'渲染“spree / shared /#{title.name.downcase}”'

其中title是分类法的名称?

我想我需要在控制器的演出动作中找到(params [:something],但我对params有点不清楚。

* * * @ beck03076这是一个很棒的技巧。非常感谢你。但它仍然没有用。

在我的控制器中,我把:

@taxon_id = Spree :: Taxon.find(params [:id])

然后在我提出的行动中:

渲染'spree / shared / women'如果@taxon_id == params [:id]

当我加载页面时,它显示“您正在寻找的页面不存在”。我的部分是在正确的目录中。我的语法是否正确?

我的参数是:

{“controller”=&gt;“spree / taxons”,“action”=&gt;“show”,“id”=&gt;“women / long-sleeve”}

再次感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

每当你不清楚params时,只需将下面的行放在动作中并执行动作。

p "****************************"
p params
p "****************************"

现在,转到启动服务器的终端。

找到这两个“ * ** * ** * ”,它们之间的所有内容都是PARAMS。

params基本上是一个红宝石哈希。

示例:

params看起来像这样,{:controller =&gt; “你好”,:action =&gt; “bye”,:id =&gt; 7,:其他=&gt; “OK”}

在您的控制器中访问id,使用params [:id]。(= 7)

访问其他人,请使用params [:others]。(=“OK”)