设计:users_controller.rb中的“def create”不起作用?

时间:2012-09-16 23:44:22

标签: devise

我一直在努力让我的头发试图在devise的users_controller.rb中使用“def create”和“def update”。

例如,我试过这个:

  def create

    @user = User.new(params[:user])

  respond_to do |format|
    if @user.save
      flash[:notice] = "Test Save"
    else
      flash[:notice] = "Test Error"
    end
  end

  end

我已使用此代码以及相应的代码在“视图”部分中显示Flash通知。但是,当我提交空白表格,不完整表格或完整表格时,不会显示任何内容。用户注册仍将在完整的表单上进行,但它不会遵循我在“def create”中输入的任何内容。除了闪存通知之外,我还尝试过其他测试方法,比如发送到不同的页面,等等。我没有得到回应。 “def update”也是如此,它似乎甚至没有使用该代码。

我对这个问题完全傻眼了,有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你应该覆盖设计控制器。

# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
  def new
    super
  end

  def create
    # add custom create logic here
  end

  def update
    super
  end
end 

您可以在此处查看默认设计控制器正在执行的操作: https://github.com/plataformatec/devise/tree/master/app/controllers/devise

如果您只想编辑Flash消息,请查看上面的链接,表明该设计使用了一种名为set_flash_message的方法

  # Sets the flash message with :key, using I18n. By default you are able
  # to setup your messages using specific resource scope, and if no one is
  # found we look to default scope.
  # Example (i18n locale file):
  #
  #   en:
  #     devise:
  #       registrations:
  #         signed_up: 'Welcome! You have signed up successfully.'

因此,您只需使用正确的文本编辑devise.en.yml文件即可!

注意:如果您覆盖了控制器,请不要忘记添加

# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}

答案 1 :(得分:0)

相反怎么样?

if @user.save
  redirect_to @user, notice: 'User was successfully created.'
else
  render action: 'new'
end

您正在设置flash,但没有重定向和渲染。我想知道你是否得到一个空白页面,或者没有身体的200页。

这将重定向到展示操作,如果成功则设置flash通知,并使用new呈现@user.errors表单,说明失败的原因。

如果您正在使用设计,您可以使用注册控制器创建一个新帐户,您不需要创建一个新帐户。如果您创建新的路线,则registrations#createusers#create指向POST /users的路线可能存在冲突