我在导航栏中有用于注册/登录的链接。我正在使用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