在代码的其他地方设计渲染符号=> up / in form partials
我刚开始使用Devise和Rails3。 我有认证,工作和理解基础知识。
截至目前在我的家庭控制器中代表我的家庭/首页我有两个链接,一个链接到Register => sign_up,另一个根据login / logout => sign_in / sign_out而变化。
但是,我不想将我的用户重定向到登录页面。 相反,我想在我的首页上显示我的登录表单。 所以我将devise/session/new
模板int分离到视图和_form.html.erb部分。
现在,在我的主视图中,我将登录表单呈现为:
Welcome: () 'delete' %> // Rendering the partial here
这是部分代码:
resource_name, :url => session_path(resource_name)) do |f| %>
true %>
我的错误如下:
NameError in Home#index Showing devise/sessions/_form.html.erb where line #1 raised: undefined local variable or method `resource' for #<#:0x6157ff8> Extracted source (around line #1): 1: resource_name, :url => session_path(resource_name)) do |f| %> 2:
3: true %> 4:
我理解错误发生的原因。 这是因为部分没有给出资源属性。 我使用了dump(resource)
,结果发现它是一个用户模型/对象所以我在它之前添加了以下内容:
并添加了我的Home控制器索引方法:
def index @user = User.new end
然而,之后我得到resource_name错误,结果只是:user
,如果我设置,然后我得到一个问题因为devise_mapping.rememberable?
我不知道如何提供。
我想要做到这一点,所以我想避免我开始的凌乱和非逻辑的方法。
看看这个问题的答案: 在不同的控制器中设计forms
您尝试使用Home控制器呈现的表单依赖于Devise定义的无法从非Devise控制器访问的帮助程序。
在home_helper.rb中添加必要的帮助器可以解决您的问题:
def resource_name :user end def resource @resource ||= User.new end def devise_mapping @devise_mapping ||= Devise.mappings[:user] end
我正在使用Devise 3.5.1,我还必须添加resource_class以使登录表单在不同的控制器上运行。
我将它添加到application_helper.rb中,因此它适用于我的所有控制器。
def resource_name :user end def resource @resource ||= User.new end def devise_mapping @devise_mapping ||= Devise.mappings[:user] end def resource_class devise_mapping.to end