在代码的其他地方设计渲染符号=> 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