【问题标题】:Rendering rails partial with dynamic variables使用动态变量渲染 Rails 部分
【发布时间】:2013-03-12 15:35:14
【问题描述】:

我正在尝试根据用户所在的分类群呈现部分内容。在我的 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。但是在分类单元#show 如果我只是输入:

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

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

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    首先我想给你一些提示:

    • 首先调用用户可提交的输入不是一个好主意(如果我提交 ?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/

    玩得开心!

    【讨论】:

    • 谢谢@dennis。我一定会在控制器中保留我的逻辑。感谢您的帮助!
    【解决方案2】:

    使用instance_variable_set

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

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

    【讨论】:

    • 我的控制器内部的语法是否正确:def show @taxon_id = params[:id].split('/').first if @taxon_id == params[:id].split('/').first instance_variable_set "@enable_#{@taxon_id}", true end
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2020-09-08
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多