【问题标题】:Rails partial locals not persisting when sent to another partial as its own localRails 局部局部变量在作为自己的局部变量发送到另一个局部变量时不会持续存在
【发布时间】:2010-11-17 10:34:05
【问题描述】:

我像这样渲染一个部分:

<%= render :partial => 'widgets/some_partial, :locals => {:foo => 'bar'} %>

所以在_some_partial.html.erb 内部,我再渲染两个部分,如下所示:

<% #foo.nil? #=> false %>
<%= render :partial => 'widgets/another_partial', :locals => {:foo => foo} %>
`<%= render :partial => 'widgets/another_partial_again', :locals => {:foo => foo} %>`

foo 局部变量在 some_partial.html.erb 甚至在 another_partial_again.html.erb 中呈现良好。然而,another_partial.html.erb 中的 foo 变量是不可访问的,即使我在渲染调用中明确地传递了它。

这里发生了什么?

感谢您的帮助。

【问题讨论】:

  • “无法访问”是什么意思?它会抛出undefined local variable or method 还是nil?你能在这些子部分上显示使用foo 的代码吗?
  • 它抛出未定义的局部变量
  • 代码很简单:

标签: ruby-on-rails partial local-variables


【解决方案1】:

当我渲染带有 :locals 定义的部分时,我也遇到了 undefined local variable or method 错误。

但是,我有一个不同的问题导致我的问题,所以我想我会分享我的解决方案,以防它帮助其他人。 (毕竟这个页面是我用谷歌搜索这个错误时的第一个结果)

基本上只需确保在调用render 时使用:partial =&gt; 'path/to/partial'

<%= render :partial => 'widgets/some_partial', :locals => {:foo => 'bar'} %>

不像我做的那样:

<%= render 'widgets/some_partial', :locals => {:foo => 'bar'} %>

像我这样的 rails/ruby 新手很容易错过。

【讨论】:

  • +1 @asgeo1 奇怪的是你需要:partial 才能让它工作,但这确实有效!
  • 哇!谢谢......我刚刚学习 Ruby,我对这个错误感到非常困惑。我希望我能修改更多点。
  • 这也解决了我的问题,但我真的很好奇为什么必须使用render partial: "partial_name", locals: { foo: "bar" } 方法。我知道我们实际上渲染了部分内容。我不明白这与视图有何不同。
  • 2015 年依然有用!
【解决方案2】:

解决了。结果我也从控制器渲染了相同的部分,而没有发送正确的局部变量。还是谢谢!!!

【讨论】:

  • 我其实也遇到了同样的问题,我的解决方案也完全一样——看到你的错误我就明白了:P
  • 我也是!哈。我将我的haml从:“- if myvar”更改为“- if defined?(myvar) && myvar”
  • 这里一样,在 AJAX 中传递部分,忘记更改符号
【解决方案3】:

遇到了这个非常老的问题,因为我遇到了同样的问题。 事实证明,如果您不使用集合或布局,那么使用 Rails 4+ 的正确方法是:

# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render "account", account: @buyer %>

如文档所述here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-23
    • 2017-11-08
    • 1970-01-01
    • 2023-01-05
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多