0

ページのタイトルを設定できるヘルパー モジュールを作成しようとしました。もちろん、それは機能していません (参照) ヘルパー メソッドがコントローラーに表示されるように、コントローラーで定義する必要があるものはありますか??

未定義のメソッド

Gitリンク: works_controller.rb

  def index
    set_title("Morning Harwood")
    @works = Work.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @works}
    end
  end

application_helper.rbで:

module ApplicationHelper
    def set_title(title = "Default title")
      content_for :title, title
    end  
end

レイアウトwork.html.erb で:

 <%= content_for?(:title) ? content_for(:title) : 'This is a default title' %>
4

1 に答える 1

3

Rails のヘルパーは、ビュー内でのコードの繰り返しを回避できるようにするビュー (およびコントローラーを含める場合はコントローラー) で使用できるメソッドです。

私のコードのヘルパーの例は、Facebook ログイン ボタンの html をレンダリングするメソッドです。このボタンは、実際にはユーザーが見る以上のものです。これは、いくつかの追加情報などを含む非表示のフォームであるためです。このため、ヘルパー メソッドを作成したかったので、10 行のコードを複数回コピーする代わりに、単一の方法。これはよりドライです。

さて、あなたの例に戻って、あなたは2つのことをしたいです

  • 表示ページ<title>,
  • <h1>ページの上部にヘッダーを追加します。

リンクされた回答が十分に明確ではないことがわかりました。確かにヘルパーが必要ですが、それを呼び出す必要もあります! そう

# application_helper.rb
def set_title(title = "Default title")
  content_for :title, title
end

# some_controller.rb
helper :application

def index
  set_title("Morning Harwood")
end

次に、レイアウトのビューで次を使用できます。

<title> <%= content_for?(:title) ? content_for(:title) : 'This is a default title' %><</title>
...
<h1><%= content_for?(:title) ? content_for(:title) : 'This is a default title' %></h1>
于 2013-07-21T08:25:58.983 に答える