首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails devise -如果用户未登录,如何显示登录表单

Rails devise -如果用户未登录,如何显示登录表单
EN

Stack Overflow用户
提问于 2012-04-18 01:13:55
回答 1查看 1.7K关注 0票数 1

我是第一次接触RoR...just,警告你:)

我在routes.rb中完成了这条路由:

代码语言:javascript
运行
复制
  scope :module => :mobile, :as => :mobile do
    constraints(:subdomain => /m/) do
      resources :home
         devise_for :users, :path => "", :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "signup" }, :controllers => {:sessions => "sidebar/sessions"}

      resources :disclosures # Will have new, get, look up a disclosure

      devise_for :users, :path => "", :path_names =>
          { :sign_in => "login", :sign_out => "logout", :sign_up => "signup" }
          # How do I tell is to also take care of the confirm account screen?
    end
  end

我制作了这个HAML页面:

代码语言:javascript
运行
复制
-content_for :primary_content do
  .content_container
    %strong{:class => "code", :id => "message"} Hello Alex!

  -content_for :primary_content do
    -if signed_in?
      =render "sidebar/common/primary_navigation"
    -else
      =render "devise/sessions/form"

当用户没有登录时,它会给我这个错误:

代码语言:javascript
运行
复制
undefined local variable or method `resource' for #<#<Class:0x147fe1990>:0x147fdab40>

代码语言:javascript
运行
复制
1: = form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => {:id => "login-form"}) do |f| 
2:   %fieldset.field-container
3:     = f.label(t :label_login) 
4:     .input

和这个堆栈跟踪:

代码语言:javascript
运行
复制
app/views/devise/sessions/_form.html.haml:1:in `_app_views_devise_sessions__form_html_haml__2025707780_2630401320'
app/views/mobile/home/index.html.haml:26:in `_app_views_mobile_home_index_html_haml__2141491110_2759485880'
app/views/mobile/home/index.html.haml:22:in `_app_views_mobile_home_index_html_haml__2141491110_2759485880'
app/views/mobile/home/index.html.haml:1:in `_app_views_mobile_home_index_html_haml__2141491110_2759485880'
app/controllers/mobile/home_controller.rb:6:in `index'

所以如果我理解正确的话,它不知道如何处理代码的表单部分。对吗?我做错了什么导致了这个问题?我该如何修复它?

谢谢你!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-18 01:25:01

您不需要呈现设计形式。

所以把这个去掉:

代码语言:javascript
运行
复制
-else
      =render "devise/sessions/form"

您需要将此代码添加到要进行身份验证的控制器的顶部:

代码语言:javascript
运行
复制
before_filter :authenticate_user!, :only => [:edit, :update, :destroy]

这将导致devise在用户未通过身份验证时重定向到登录表单。如果他已经通过身份验证,则将呈现您的普通视图。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10195843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档