为什么在rails视图中未定义content_for方法?

时间:2013-10-02 20:20:23

标签: ruby-on-rails ruby templates yield content-for

我有一个rails项目。

application.html.slim我有:

doctype html
html
  head
    title RailsMongoidPj
    = stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true
    = javascript_include_tag "application", "data-turbolinks-track" => true
    = csrf_meta_tags
    meta content="width=device-width, initial-scale=1.0" name="viewport"
    = yield(:html_head)
  body
    = yield

在控制器SearchController中,它有一个方法:

  def javascript(*files)
    content_for(:html_head) do
      javascript_include_tag(*files)
    end
  end
  helper_method :javascript

此控制器还有一个方法new,其中包含相应的视图,其内容为:

= javascript('/vendor/assets/javascript/handelbars.runtime.js')

- content_for :html_head do
  script#entry-template type="text/x-handlebars-template"
    | template content

但我有一个错误:

undefined method `content_for' for #<SearchFlickrController:0x007f8e4f2bae78>

Extracted source (around line #3):

1  / search flickr api page
2  
3  = javascript('/vendor/assets/javascript/handelbars.runtime.js')
4  
5  - content_for :html_head do
6    script#entry-template type="text/x-handlebars-template"

为什么方法content_for未定义?它不是标准rails方法吗?

1 个答案:

答案 0 :(得分:2)

content_for是一种帮助方法。您在视图中使用content_for,而不是在控制器中。因此,使用content_for的方法的正确位置是帮助程序(例如app/helper/search_helper.rb):

module SearchHelper  
  def javascript(*files)
    content_for(:html_head) do
      javascript_include_tag(*files)
    end
  end
end