使用动态变量渲染rails部分

时间:2013-03-12 15:35:15

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

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

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

在taxons控制器中,在show方法中,我有:

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

在分类单元中#show我有:

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

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

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

没有'= true'然后页面呈现,输出'@enable_women'。所以我知道它正在获取正确的变量,我只需要将该变量设置为true。我错过了什么?

非常感谢。

2 个答案:

答案 0 :(得分:3)

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

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

  • 控制者是野兽!我看到你在视图中设置了一个真/假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 %>

当然,您可以很好地确定返回的用户的范围并相应地渲染所需的部分。

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

玩得开心!

答案 1 :(得分:1)

使用instance_variable_set

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

只是提醒一下,在控制器内做这些事情会更好。