我一直在努力让我的头发试图在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”也是如此,它似乎甚至没有使用该代码。
我对这个问题完全傻眼了,有什么想法吗?
答案 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#create
和users#create
指向POST /users
的路线可能存在冲突