什么是Ruby / Rails'钩子'?

时间:2010-10-10 17:57:54

标签: ruby-on-rails ruby

我正在编辑一些代码,我看到以下内容:

<% 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分钟谷歌搜索,没有发现这个问题。

2 个答案:

答案 0 :(得分:2)

在纯Ruby意义上,它所做的只是调用一个名为 hook 的方法,为它提供一个参数和一个块。

在查看Spree soure代码之后,是的,这是方法:http://github.com/railsdog/spree/blob/master/core/app/helpers/hook_helper.rb

如果不进一步了解,它的用途并不明显。我想是在内置模板中添加一些HTML(在这种情况下重新定义登录表单的样子)。

答案 1 :(得分:1)

在Spree中,主题钩子是一种定义Spree默认模板部分的方法,您可以在以后轻松替换或删除,而无需实际编辑模板文件。

请参阅http://spreecommerce.com/documentation/customization.html#hooks

上的文档

在上面的示例中,挂钩名为:login 。如果您想在登录表单之前添加标题,可以使用钩子来实现此目的而无需修改模板。

添加此...

class YourAppHooks < Spree::ThemeSupport::HookListener
  insert_before :login, :text=>'<h1>Ahoy!!!</h1>'.html_safe
end

...到文件......

  

RAILS_ROOT /供应商/扩展/ your_app / LIB / your_app_hooks.rb