1. ホーム
  2. ruby-on-rails

[解決済み] Ruby/Rails の「フック」とは何ですか?

2022-01-26 01:30:19

質問

コードを編集しているところ、以下のような表示が出ました。

<% hook :login do %>
  <% form_tag user_session_path do  %>
    <p>
      <%= label :user_session, :login, 'Email Address' %><br />
      <%= text_field :user_session, 'login' %>
    </p>
    <p>
      <%= label :user_session, :password, 'Password' %><br />
      <%= password_field :user_session, 'password' %>
    </p>
    <p>
      <label>
        <%= check_box :user_session, :remember_me %>
        <%= label :user_session, :remember_me, 'Remember me' %>
      </label>
    </p>

    <p><%= submit_tag 'Log In' %></p>
  <% end %>

  or <%= link_to 'Create a new account', signup_path %> | <%= link_to 'Forgot Password', new_password_reset_path %>
<% end %>

何をするのか

<% hook :login do %>
  ...
<% end %>

を行うか?

5分ほどググってみましたが、この件に関しては何も出てきませんでした。

解決方法は?

純粋なRubyの感覚では、このメソッドが行っているのは フック 引数を1つ、ブロックを1つ与えます。

そして、Spreeのスールコードに目を通した結果、うん、ここにそのメソッドがある。 http://github.com/railsdog/spree/blob/master/core/app/helpers/hook_helper.rb

さらに詳しく見てみないと、これが何に使われているのかがわからない。組み込みのテンプレートにHTMLの一部を追加するためだと想像します(この場合、ログインフォームがどのように見えるかを再定義します)。