将变量传递给部分 - 未定义的局部变量或方法错误

时间:2013-04-26 05:41:40

标签: ruby-on-rails

以下是我视图中调用partial的代码:

<%= 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),并多次重启服务器

提前感谢您的时间。

6 个答案:

答案 0 :(得分:54)

我注意到如果我在部分路径之前没有包含'partial:',就像这样:

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

我被要求在我的部分中使用哈希+符号来访问其他人已经注意到的所需值。

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

但是,在我的部分路径之前包括'partial:':

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

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

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

要记住一些事情,这个问题在尝试将本地哈希发送给我的部分时会让我失去一段时间。

答案 1 :(得分:20)

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

<% render partial: 'your_partial', locals: {foo: 'Biggs', bar: 'Wedge'} %>

然后,您的本地人将只能foobar,因此可以直接访问:

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

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

<% render 'your_partial', locals: {foo: 'Biggs', bar: 'Wedge'} %>

然后您的本地人将成为locals的成员,因此可以访问:

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

答案 2 :(得分:0)

它与我合作.. _tabs.html.erb位于哪里?

答案 3 :(得分:0)

尝试这样的事情:

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

就我而言,这与我如何将实例变量传递到局部变量无关,但这是因为 Rails 检测到局部变量中没有提供给局部变量< /strong>

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