【问题标题】:Rails 3.0 undefined local variable when rendering a partialRails 3.0 渲染部分时未定义的局部变量
【发布时间】:2013-05-19 06:35:46
【问题描述】:

我正在使用 Rails 3.0.20 应用程序,我试图通过一个局部变量传递一个局部变量,它显示“未定义的局部变量”我已经查看了有关此问题的其他帖子,并且无法不要修复它。

这是我渲染部分的调用

    = f.fields_for :current_positions do |builder|
        = render :partial => 'current_position_fields', :locals => {:f => builder, :foo => 'hi'}

这是我的部分

%tr.pos_start
    %td
        = foo
        = f.hidden_field :id, class: "pos_id"
        = f.label :name, "Position Name"
    %td= f.text_field :name
%tr.pos_loc
    %td= f.label :location, "Position Location"
    %td= f.text_field :location
%tr.pos_end
    %td= f.label :year, "Position Year"
    %td= f.text_field :year
    %td.fields
        = link_to_remove_fields "DEL", f

错误信息是

undefined local variable or method `foo' for #<#<Class:0x00000008d4a050>:0x00000008d3c590>

如果我将 = foo 从代码中取出,其他一切都可以正常工作。

【问题讨论】:

  • 您的确切用例是什么,而不是 foo 指向一个字符串?它当前指向一个字符串,所以可能是="#{foo}"?
  • 我正在尝试为 hidden_​​field :id 创建一个唯一引用,以便我可以通过下面的一些 jquery 访问它,以克服用户在浏览器中点击后退按钮的错误。因此,我最终将传递一个计数器/索引,而不是“foo”,我将在循环中更新它,我正在渲染部分并将其附加到 hidden_​​field :id 的类名和下面的脚本调用中。目前我想知道为什么我不能将一个简单的字符串传递给一个部分。
  • render 的语法完全正确,afaik。刚刚在我当地的开发人员上试了一下,工作得很好。

标签: ruby-on-rails ruby-on-rails-3 haml partial-views


【解决方案1】:

发现我的错误,我也在应用程序助手中调用了部分,并且没有传递适当的局部变量。

当我可以将部分复制到另一个名称并使用变量调用它并且它起作用时,我发现了这一点。

【讨论】:

  • 我遇到了同样的问题,你的解决方案解决了!谢谢!在我的情况下,我有一个也使用渲染的部分,当我更改另一个时我没有更改该渲染。
【解决方案2】:

试试:

 =render 'current_position_fields', :f => builder, :foo => 'hi'

【讨论】:

  • 如果 map7 使用的那个不工作,这也不行。 render 检查第一个参数是 String 还是 Hash;如果是散列,它会用部分、本地、集合等的键/值来解释它,如果第一个参数是字符串,它会形成散列本身,将第一个参数视为部分名称,将其余部分视为本地。
猜你喜欢
  • 1970-01-01
  • 2016-11-21
  • 2018-05-05
  • 1970-01-01
  • 2011-05-14
  • 2012-03-04
  • 2016-01-10
  • 1970-01-01
  • 2018-04-13
相关资源
最近更新 更多