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

ris*_*im3 23 ruby-on-rails

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

<%= render(:partial => "tabs", :locals => {:class_Name => "Science", :y => 36}) %>
Run Code Online (Sandbox Code Playgroud)

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

<div>
<h1> <%= class_Name %> </h1>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望HTML输出:

<div>
<h1> Science </h1>
</div>
Run Code Online (Sandbox Code Playgroud)

但相反,我得到错误:

undefined local variable or method `class_Name' for #<#<Class:0x007f873b156c28>:0x007f873b1f9540>
Run Code Online (Sandbox Code Playgroud)

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

在此先感谢您的时间.

MFa*_*mer 57

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

<%= render 'my_partial', :locals => {:class_Name => "Science", :y => 36} %>
Run Code Online (Sandbox Code Playgroud)

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

<div>
<h1> <%= locals[:class_Name] %> has a y value of <%= locals[:y] %></h1>
</div>
Run Code Online (Sandbox Code Playgroud)

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

<% render partial: 'my_partial', :locals => {:class_Name => 'Science', :y => 36 } %>
Run Code Online (Sandbox Code Playgroud)

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

<div>
<h1><%= class_Name %> has a y value of <%= y %></h1>
</div>
Run Code Online (Sandbox Code Playgroud)

请记住这个问题,当我尝试将本地哈希发送给我的部分时,这个问题让我失去了一段时间.

  • 谢谢你 - 在我的情况下,指定`partial`是关键. (4认同)

Mon*_*dia 21

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

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

那么你的当地人将可以简单地foobar直接通俗易懂这样的:

<%= foo %> //returns Biggs 
<%= bar %> //returns Wedge
Run Code Online (Sandbox Code Playgroud)

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

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

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

<% locals[:foo] %> //returns Biggs
<% locals[:bar] %> //returns Wedge
Run Code Online (Sandbox Code Playgroud)


Lia*_*ian 0

它对我来说工作得很好..你在哪里_tabs.html.erb