【问题标题】:Render a rails partial based on the id of an action根据动作的 id 渲染 Rails 部分
【发布时间】:2013-03-11 21:48:42
【问题描述】:

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

我有一个分类模型,它有_many 个分类单元,而分类模型有_many 个产品。

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

其中 title 是分类的名称?

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

* * * @beck03076 这是一个很棒的技巧。非常感谢。但是还是不行。

在我的控制器中我放了:

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

然后在我提出的动作中:

如果@taxon_id == params[:id] 则呈现“狂欢/共享/女性”

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

我的参数是:

{"controller"=>"spree/taxons", "action"=>"show", "id"=>"women/long-sleeve"}

再次感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    当您不清楚参数时,只需将下面的行放入操作并执行操作即可。

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

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

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

    params 基本上是一个 ruby​​ 哈希。

    示例:

    参数看起来像这样,{:controller => "hello",:action => "bye", :id => 7, :others => "OK"}

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

    要访问其他人,请使用 params[:others].(="OK")

    【讨论】:

    • 如果有帮助,请勾选正确的答案,让其他人知道它有帮助!
    • 如果您只想从您的 :id 中获取“女性”,请执行 params[:id].split("/").first
    • 我用params[:id].split("/")[0],这不可读吗?就像,拆分返回一个数组,我想要第一个元素?
    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多