我的设计 registration_controller.rb
中有一个自定义的 protected 方法:
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
最佳答案
render 'new'
呈现 new
模板,但 url 和 action 保持不变。
例如,您从 create
方法调用 render 'new'
:
def create
@model = Model.new(params[:model])
if @model.valid?
@model.save!
redirect_to :some_path
else
render 'new'
end
end
如果 @model
无效,它会使用 create
方法中的 @model
变量呈现 new
模板。
因此,在您的情况下,如果您希望将用户重定向到 users/sign_up
,您需要明确地将他重定向到此页面:
通过 redirect_to 'users/sign_up'
或使用路径辅助方法。
关于ruby-on-rails - 自定义设计方法 : render 'new' redirect to/users instead of/users/sign_up,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51481771/