【问题标题】:Devise- Custom users#new method设计-自定义用户#新方法
【发布时间】:2012-03-19 13:17:14
【问题描述】:
def new
     @title = "Create a user"
     @user = User.new
end

<%= form_for(@user) do |f| %>
  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email%>
  </div>
  <div class="field">
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </div>
  <div class="field">
    <%= f.label :password_confirmation, "Confirmation" %><br />
    <%= f.password_field :password_confirmation %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

当我尝试提交表单以创建新用户时,我收到一条消息“您已经登录”。并且没有创建用户可能是什么问题?

【问题讨论】:

  • 据我所知,你不能只使用自定义方法,你需要提供一个完整的自定义控制器,即注册。你到底想达到什么目标?
  • 我希望只有在您登录时才能创建用户
  • 他们是同一种已经登录的用户,还是您在谈论视频游戏世界中的 XBox Live 和 PS3/PSN 等子帐户?无论如何,我认为你需要用更多的词来描述你想做的事情。
  • Eric:他们是同一个用户,我没有使用 Vapire 的建议修复它,覆盖了注册控制器;)

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 devise


【解决方案1】:

正如我在评论中提到的,你必须告诉 Devise 你想使用自定义控制器进行注册,所以它知道不使用它的默认行为。

由于您想限制用户公开注册,我认为(我没有对此进行测试)您必须创建自己的自定义注册控制器,它的作用与设计默认控制器相同,除非用户已经登录...我不确定(非公开)注册完成后究竟会发生什么。原因 Devise 会尝试自动让您登录 - 取决于您是否使用可确认...但我的猜测是您会以旧用户身份注销并以新用户身份登录...

因此,为了给您提供指导,您应该阅读关于Configuring Controllers 的自述文件部分。 然后您可以尝试简单地添加 before_filter 以在您的自定义注册控制器中验证用户(假设您的用户模型称为User):

class MyRegistrationsController < Devise::RegistrationsController
  before_filter :authenticate_user!
end

但又一次。我没有对此进行测试...所以也许这不是这样做的方法,但值得一试:)

【讨论】:

  • 我添加了 before_filter :authenticate_user!到我的 UsersController 但没有任何改变,这是我尝试创建新用户的地方
  • 你告诉 Devise 在你的路由文件中使用你的 UsersController 作为它的 RegistrationController 吗?你做了自述文件中提到的所有事情吗?
  • devise_for :users, :controllers => { :registrations => "users/new" }
  • 好吧...在这个配置中,Devise 正在寻找一个名为Users::NewController 在目录controllers/users 中的注册控制器你必须提供一个完整的控制器(= 类)而不是一个方法!阅读自述文件!
  • 那么没有办法在自己的控制器中创建用户?
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多