【问题标题】:Undefined method ` yield' - Rails未定义的方法`yield' - Rails
【发布时间】:2014-04-04 21:34:33
【问题描述】:

我收到此错误:

undefined method ` yield' for #<#<Class:0x007fccb4710880>:0x007fccb43f0308>

尝试在应用程序布局中使用 content_for 帮助器呈现页面特定样式表时。

我的 index.html.erb 模板代码包含:

<% content_for :head do %>
  <%= stylesheet_link_tag "inspection.css" %>
<% end %>

我的 application.html.erb 代码包含:

<!DOCTYPE html>
<html>
<head>
    <title>Plastics</title>
    <%= stylesheet_link_tag    "application", :media => "all" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
    <%= yield :head %>
</head>
<body>
    <div id="wrapper">
        <%= yield %>
    </div>
</body>
</html>

我在 Ruby 2.0.0-p195 上运行 Rails 3.2.15

我曾尝试切换到 Ruby 1.9.3-p429 和其他版本的 rails,包括 3.2.12、3.2.13、..但没有运气

我在其他应用程序中使用过很多次,没有任何问题。

【问题讨论】:

  • 请发布整个错误堆栈跟踪。
  • 您需要在此处提供更多上下文,因为一定有其他代码混淆了这一点。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

我假设您已经直接从终端复制并粘贴了“未定义方法”错误。开放引号和单词yield 之间似乎有一个空格,这让我觉得Ruby 正在尝试调用一个名称以空格开头的方法。

通常,这并不容易做到,但您可以使用send 强制执行,作为演示:

Object.new.send(' yield')
# NoMethodError: undefined method ` yield' for #<Object:0x007fc413258968>

那么:鉴于您编写布局的方式,为什么 Ruby/ERb 在它认为是方法名称的开头包含一个空格?

我的猜测是,其中有某种流氓隐形角色会导致解析失败。尝试重新键入包含yield 语句的两行,看看它是否开始工作。

【讨论】:

  • 就是这样。代码编辑器添加了一些不可见的额外内容。我删除并重新创建了布局的 部分,它可以工作。标记为已接受。
猜你喜欢
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 2013-08-30
  • 2015-10-03
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多