【问题标题】:Passing Variable to Partial - undefined local variable or method error将变量传递给部分 - 未定义的局部变量或方法错误
【发布时间】:2013-04-20 05:11:45
【问题描述】:

这是我认为调用部分的代码:

<%= render(:partial => "tabs", :locals => {:class_Name => "Science", :y => 36}) %>

现在是 _tabs.html.erb 中的内容:

<div>
<h1> <%= class_Name %> </h1>
</div>

我希望 HTML 输出:

<div>
<h1> Science </h1>
</div>

但是我得到了错误:

undefined local variable or method `class_Name' for #<#<Class:0x007f873b156c28>:0x007f873b1f9540>

我已经关闭并重新启动了 Aptana(我使用的 IDE),并多次重新启动服务器

提前感谢您的宝贵时间。

【问题讨论】:

  • 可以打印y局部变量的内容吗?
  • 当我使用结尾带有? 字符的符号时,或者当我不在本地哈希上发送它时(这是因为我不想发送总是那个参数,所以我必须在使用它之前询问它是否存在)。例如:&lt;% if local_assigns.key?(:is_active) %&gt;

标签: ruby-on-rails


【解决方案1】:

在我的情况下,这与我如何将实例变量传递给部分无关,但 因为 rails 检测到部分内的变量 没有提供给部分

由于这个非常简单的原因,您可能会收到错误(在这种情况下,您的代码调用部分绝对没有问题 - 检查部分代码以查找您没有提供给它的任何变量)

【讨论】:

    【解决方案2】:

    这也发生在我身上。我使用的是 Middleman,使用 middleman server 工作正常,但是当我使用 middleman build 构建我的网站时,我遇到了问题中提到的错误。我尝试了上述所有方法,但都没有奏效。事实证明,在构建阶段,中间人也尝试将部分构建为独立的 html 文件,从而产生错误。原因是我忘记在文件名前加上下划线以将其从构建过程中排除。如果所有其他方法都失败了,只需将代码包装在部分的 if 语句中,如下所示:

    <% if defined?(class_Name) %>
    ...
    <% end %>
    

    【讨论】:

      【解决方案3】:

      如果您在渲染中使用术语partial:,例如:

      &lt;% render partial: 'your_partial', locals: {foo: 'Biggs', bar: 'Wedge'} %&gt;

      那么您的本地人将可以简单地以foobar 的形式使用,因此可以直接访问:

      <%= foo %> //returns Biggs 
      <%= bar %> //returns Wedge
      

      但是,如果您在渲染中使用术语partials:,例如:

      &lt;% render 'your_partial', locals: {foo: 'Biggs', bar: 'Wedge'} %&gt;

      然后您的本地人将成为locals 的成员,可通过以下方式访问:

      <% locals[:foo] %> //returns Biggs
      <% locals[:bar] %> //returns Wedge
      

      【讨论】:

      • partials: 还是partial:
      • partial:@alex
      【解决方案4】:

      我注意到,如果我没有在部分路径之前包含 'partial:',如下所示:

      <%= render 'my_partial', :locals => {:class_Name => "Science", :y => 36} %>
      

      正如其他人所指出的那样,我被要求在我的部分中使用哈希+符号来访问所需的值。

      <div>
      <h1> <%= locals[:class_Name] %> has a y value of <%= locals[:y] %></h1>
      </div>
      

      但是,在我的部分路径之前包括“部分:”:

      <% render partial: 'my_partial', :locals => {:class_Name => 'Science', :y => 36 } %>
      

      ...允许我直接调用哈希值。

      <div>
      <h1><%= class_Name %> has a y value of <%= y %></h1>
      </div>
      

      请记住,当我尝试将本地哈希发送到我的部分时,这个问题让我有一段时间感到困惑。

      【讨论】:

      • 我已经多次使用没有 hash+key 的语法,AFAIK 没有理由强迫你这样做(正如你所建议的那样)。
      • 感谢@lucke84,我无法弄清楚为什么需要在我的部分中包含哈希名称。我相信我明白了为什么在更多地使用我的代码之后,我似乎没有在渲染语句中的部分路径之前指定“部分:”,这会有所不同。我已经修改了答案。
      • 谢谢你 - 在我的例子中,指定 partial 是关键。
      【解决方案5】:

      试试这样的:

      <%= render partial: "form" , locals:{ name_you_want_use_in_partial: @varialble_to_pass } %>
      

      我遇到了同样的问题。 所以我查看了一个文档 Ruby on Rails - passing local... 并使用了流动符号 - 现在它正在工作:)

      【讨论】:

        【解决方案6】:

        我的工作正常.. 你的_tabs.html.erb 在哪里?

        【讨论】:

        • 它与调用它的视图位于同一文件夹中。部分中的所有其他 html 标记都显示得很好.. 只是局部变量替换没有通过
        • 您是否尝试重新启动服务器或 PC?这可能会有所帮助或尝试清除缓存。它对我很好。我使用了你的代码并创建了一个_tabs.html.erb on the same directory
        • 是的,我都重启了好几次
        • 尝试删除括号......所以它应该看起来像这样:&lt;%= render :partial =&gt; "tabs", :locals =&gt; {:class_Name =&gt; "Science", :y =&gt; 36} %&gt; 你清除缓存并重新启动浏览器了吗?
        • 这有点奇怪...我没有看到您的代码有任何问题...清除缓存后您是否重新启动浏览器?
        猜你喜欢
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 2017-01-26
        相关资源
        最近更新 更多