0

我一直在努力让设计的 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”也是如此,它似乎甚至没有使用该代码。

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

4

2 回答 2

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 消息,查看上面的链接表明 devise 使用了一个名为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"}
于 2013-02-26T16:07:46.157 回答
0

这个怎么样?

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

您正在设置flash,但没有重定向,也没有渲染。我想知道你是得到一个空白页,还是没有正文的 200 页。

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

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

于 2013-02-19T16:59:17.170 回答