【问题标题】:Devise session controller create method设计会话控制器创建方法
【发布时间】:2013-12-07 17:30:09
【问题描述】:

我为devise 用户登录创建了一个会话控制器。在视图中,表单如下所示

    
    
    

在控制器中我不知道newcreatedestroy 方法请帮助我
class SessionController < ApplicationController
   def new
   end

   def create
   end

   def destroy
   end
end

谢谢

【问题讨论】:

  • 你应该不需要 SessionController 设计 Rails 引擎自动加载一个(除非你出于某种原因需要自定义逻辑)你是否使用设计生成器来创建视图?
  • 是的,我为视图使用了设计生成,还为添加额外字段创建了注册控制器,并且我成功添加了它我需要在登录表单中提供帮助,我需要在用户名代替电子邮件。我还更改了 devise.rb 文件以使 config.authentication_keys = [ :username ].

标签: ruby-on-rails devise controller


【解决方案1】:

如果您想使用自己的视图,有两种选择。如果您不需要自定义控制器逻辑(您不需要简单地将登录字段更改为用户名,因为它是一个配置选项),那么您可以使用范围视图,例如:

# in config/devise.rb
config.scoped_views = true

这将触发设计根据角色查找视图,例如在users/sessions 中。

如果您确实需要自定义控制器逻辑,您将创建一个控制器,将适当的设计控制器子类化(在您的问题中您不这样做),然后告诉设计使用您的控制器。

# app/controllers/users/session_controller.rb
class SessionsController < Devise::SessionsController
end

# then in config/routes.rb
devise_for :users, :controllers => { :sessions => "users/sessions" }

【讨论】:

  • 其实我想用@username字段代替email。
  • 不应该影响控制器。您可以通过设置config.authentication_keys = [ :username ]config/devise.rb 中更改它。
  • 我在 devise.rb 文件中进行了更改,但它仍然在登录表单中显示电子邮件字段。
  • 您确定设计正在使用您的控制器吗?从事情的外观来看,似乎不太可能。在问题中,您的控制器没有像我建议的那样继承设计控制器,因此根本不应该工作。如果您不需要自定义控制器逻辑,则根本不需要控制器,因为设计为此提供了范围视图选项。
  • 如果它仍然在表单本身上显示电子邮件,您需要更改路线并编辑您生成的表单。如答案所述,在 config/routes.rb 添加 devise_for :users, :controllers =&gt; { :sessions =&gt; "sessions" } THEN 确保您已更改表单 rails_root/app/views/devise/sessions/new.html.erb
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
相关资源
最近更新 更多