Ste*_*ess 5 ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2
我刚开始使用Devise和Rails3.我已经认证了IQnetication并且正在理解基础知识.
截至目前在我的Home Controller中代表我的Home/Front Page我有两个链接,一个链接到Register => sign_up,另一个根据login/logout => 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>
Run Code Online (Sandbox Code Playgroud)
这是部分代码:
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
我的错误如下:
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:
Run Code Online (Sandbox Code Playgroud)
我理解错误发生的原因.这是因为部分它没有被赋予资源属性.我用过dump(resource),结果发现它是用户模型/对象所以我在它之前添加了以下内容:
<% if @user %>
<% resource = @user %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
并添加了我的Home控制器索引方法:
def index
@user = User.new
end
Run Code Online (Sandbox Code Playgroud)
然而,之后我得到resource_name错误,结果只是:user,如果我设置,然后我得到一个问题,因为devise_mapping.rememberable?我不知道如何提供.
我想要做到这一点,所以我想避免我开始的凌乱和非逻辑的方法.
小智 17
看看这个问题的答案:在不同的控制器中设计表单
您尝试使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8708 次 |
| 最近记录: |