0

我正在尝试根据用户所在的分类群呈现部分内容。在我的 application.html.erb 布局中,我有以下代码行:

<%= render 'spree/shared/women_subnav' if @enable_women %>

在分类单元控制器中,在 show 方法中,我有:

@taxon_id = params[:id].split('/').first

在分类单元#show 我有:

<% if @taxon_id == params[:id].split('/').first %>
  <%= "@enable_#{@taxon_id}" = true %>
<% end %>

当我运行它时,我得到一个 SyntaxError。但是在taxons#show中,如果我只是输入:

<% if @taxon_id == params[:id].split('/').first %>
  <%= "@enable_#{@taxon_id}" %>
<% end %>

如果没有“= true”,则页面呈现,输出“@enable_women”。所以我知道它得到了正确的变量,我只需要将该变量设置为 true。我错过了什么?

非常感谢。

4

2 回答 2

3

首先,我想给你一些提示:

  • 首先调用用户可提交的输入不是一个好主意(如果我提交 ?id=,它将返回 nil),非 utf-8 编码也会使您的应用程序崩溃,例如:?id=Ж

  • 控制器是野兽!我看到您正在视图中设置真/假 instance_variable 的值,请使用控制器在呈现其输出之前定义逻辑。特别是当参数依赖时。

所以解决方案:在你的控制器中作为 params[:id] 应该建议一个 INT(11) 值:

def action
  # returning a Taxon should be a good idea here
  @taxon = Taxon.find(params[:id])
  # as I would give a Taxon class an has_many relation to a User
  @users = @taxon.users
end

在你的行动看来

<%= render :partial => "taxons/users", collection: @users %>

当然,您将拥有强大的能力来确定返回的用户并相应地呈现想要的部分。

如果您想了解有关“Rails 方式”的更多信息,请阅读: http: //guides.rubyonrails.org/

玩得开心!

于 2013-03-12T16:25:15.977 回答
1

利用instance_variable_set

instance_variable_set "@enable_#{@taxon_id}", true

只是提醒一下,最好在控制器中执行这些操作。

于 2013-03-12T15:36:18.827 回答