我在设计registration_controller.rb
中有一个受保护的自定义方法:
before_action :check_secret_code, only: [:create]
# Method de condition pour création du compte
include ApplicationHelper
# need application_helper.rb or will not work.
# GET /resource/sign_up
def new
super
end
# POST /resource
def create
super
end
def check_secret_code
if Invitation.where(:invit_name => params[:user]["invit_ref"]).blank?
render 'new'
else
Invitation.where(:invit_name => params[:user]["invit_ref"]).destroy_all
return true
end
end
但是当使用render 'new'
时,它将呈现/users
而不是/users/sign_up
且没有任何持久性信息。你知道为什么吗?
这是我的application_helper.rb
module ApplicationHelper
def resource_name
:user
end
def resource
@user ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
end
答案 0 :(得分:1)
render 'new'
呈现new
模板,但url和action保持不变。
例如,您从render 'new'
方法调用create
:
def create
@model = Model.new(params[:model])
if @model.valid?
@model.save!
redirect_to :some_path
else
render 'new'
end
end
如果@model
无效,它将使用new
方法中的@model
变量呈现create
模板。
因此,在您的情况下,如果您希望将用户重定向到users/sign_up
,则需要将其显式重定向到此页面:
通过redirect_to 'users/sign_up'
或使用路径帮助器方法。