未定义的方法`yield' - Rails

时间:2014-03-03 17:39:29

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

我收到此错误:

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,..没有运气

我在其他应用程序中多次使用过这个问题。

1 个答案:

答案 0 :(得分:3)

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

通常,这并不容易,但你可以使用send强制它,作为演示:

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

所以:考虑到你编写布局的方式,为什么Ruby / ERb在它认为是方法名称的开头包含一个空格?

我的猜测是,那里有某种流氓看不见的角色正在抛弃解析。尝试重新输入包含yield语句的两行,看看它是否开始工作。