设计注册登陆页面

时间:2016-01-22 07:09:18

标签: ruby-on-rails devise

我看到了一些关于使用帮助器为所有页面设置设计的教程,但我无法达到相同的结果,这是我的代码。

我正在关注本教程,但它不起作用:https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

我的页面有一个控制器(现在我只有登录页面)

pages_controller.rb

    class PagesController < ApplicationController


    def landing
    end
end

我在views/layouts/shareds/_header.html.erb中有一个标题部分,我在调用设备注册/登录。

<div class="col-md-5">

                <div class="signup-header wow fadeInUp">
                    <h3 class="form-title text-center">GET STARTED</h3>
                    <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
                          <%= devise_error_messages! %>

                          <div class="field">
                            <%= f.label :email %><br />
                            <%= f.email_field :email, autofocus: true %>
                          </div>

                          <div class="field">
                            <%= f.label :password %>
                            <% if @minimum_password_length %>
                            <em>(<%= @minimum_password_length %> characters minimum)</em>
                            <% end %><br />
                            <%= f.password_field :password, autocomplete: "off" %>
                          </div>

                          <div class="field">
                            <%= f.label :password_confirmation %><br />
                            <%= f.password_field :password_confirmation, autocomplete: "off" %>
                          </div>

                          <div class="actions">
                            <%= f.submit "Sign up" %>
                          </div>
                        <% end %>
                </div>              

            </div>

按照我做的教程:

application_helper.rb

 module ApplicationHelper
    helper_method :resource_name, :resource, :devise_mapping

  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end
end

application_controller.rb

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  include ApplicationHelper
end

我不断收到此错误:针对ApplicationHelper的未定义方法`helper_method':模块

enter image description here

1 个答案:

答案 0 :(得分:0)

删除helper_method

 #app/helpers/application_helper.rb`
 module ApplicationHelper
  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end
end

正如docs州......

  

控制器方法声明为帮助程序。

这意味着采用controller方法并将其提供给您的观点:

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   helper_method :current_user

   private

   def current_user
      ...
   end
end

#app/views/layouts/application.html.erb
<%= link_to "Profile", user_profile_path if current_user %>

要添加评论,helper methods(尤其是Devise)可以为您的观看次数提供支持功能:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>

如上所示,resource&amp;通过帮助程序提取resource_name个值。