我刚刚开始使用Devise和Rails3。我已经认证了,并且了解了基础知识。设计render sign => up /在其他地方的代码形式
截至目前在我的家庭控制器代表我的家庭/首页,我有两个链接,一个链接到Register => sign_up,另一个根据登录/注销=> sign_in/sign_out而改变。
但是我不想将我的用户重定向到登录页面。相反,我想在我的头版上显示我的登录表单。所以我已将devise/session/new
模板int分隔到视图和_form.html.erb部分。
现在在我家查看我呈现的登录表单像这样:
<% if user_signed_in? %>
Welcome: <b><%= current_user.username %> (<%= current_user.group.name %>)</b>
<%= link_to "Logout", destroy_user_session_path, :method => 'delete' %>
<% else %>
<%= render 'devise/sessions/form' %> // Rendering the partial here
<%= link_to "Login", new_user_session_path %>
<% end %>
<hr>
这是部分的代码:
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<% if devise_mapping.rememberable? -%>
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
<% end -%>
<div><%= f.submit "Sign in" %></div>
<% end %>
我的错误如下:
NameError in Home#index
Showing devise/sessions/_form.html.erb where line #1 raised:
undefined local variable or method `resource' for #<#<Class:0x614ec68>:0x6157ff8>
Extracted source (around line #1):
1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
2: <div><%= f.label :email %><br />
3: <%= f.email_field :email, :autofocus => true %></div>
4:
我明白错误发生的原因。这是因为部分它没有被赋予资源属性。我用dump(resource)
和事实证明这是一个用户模式/对象,所以我说了下列:
<% if @user %>
<% resource = @user %>
<% end %>
,并添加以下到我的家庭控制器指数法:这之后,我得到
def index
@user = User.new
end
然而resource_name错误,结果只是:user
,如果我设置,那么我得到一个问题,因为devise_mapping.rememberable?
,我不知道如何提供。
我想正确地做到这一点,所以我想避免凌乱和不合逻辑的方法,我开始。