自定义设计方法:将“新”重定向到/ users而不是/ users / sign_up

时间:2018-07-23 14:54:46

标签: ruby-on-rails ruby devise render

我在设计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

1 个答案:

答案 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'或使用路径帮助器方法。