Rails+Devise:如何让整个网站都可以访问登录实例



我在导航栏中有用于注册/登录的链接。我正在使用Devise。

我的问题是,我不知道如何设置变量实例,整个应用程序(所有控制器和操作)都可以访问该实例。

对于注册,我做了以下操作:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :load_registration
  def load_registration
    @user = User.new
  end
end

这似乎奏效了。当我点击链接时,会弹出一个窗口,在那里会显示一个注册表格(如果用户没有登录)。但是如何对登录进行同样的操作呢?

如果有用户登录,听起来你在寻找current_user。如果是这样,你的ApplicationController将更改为:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :load_registration
  def load_registration
    @user = current_user || User.new
  end
end

这样,如果current_user可用,则将@user设置为其,否则将User的新实例设置为@user

然而,这违背了design为您所做的部分功能,因为您通常应该在应用程序中使用current_user作为当前登录用户的助手。

我不确定你在问什么,但如果你想链接到Devise的注册或登录页面,你不需要任何实例变量。这取决于你的资源,但应该是这样的:

<% unless current_user %> 
  <%= link_to "Login", new_user_session_path %>
  <%= link_to "Register", new_user_registration_path %>
<% end %>

运行rake routes了解您的Devise路径。

如果你想把登录或注册表格放在导航栏里,你可以用

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

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

并在您的应用程序助手中包括Devise助手:

def resource_name
  :user
end
def resource
  @resource ||= User.new
end

相关内容

最新更新