【问题标题】:Custom devise method : render 'new' redirect to /users instead of /users/sign_up自定义设计方法:渲染“新”重定向到 /users 而不是 /users/sign_up
【发布时间】:2018-12-31 01:57:20
【问题描述】:

我的设计中有一个自定义的受保护方法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

【问题讨论】:

  • 你是怎么走上这条路的?例如哪个视图包含此处提交的表单以及控制器操作是什么样的?似乎您希望数据显示在 new 上,并且看起来您在新操作中有一个 User,因此为了使该数据持续存在,您还需要此方法中的 @user 实例变量。但如果没有额外的上下文,就很难分辨
  • 嘿@engineersmnky 感谢您的回答!我对这个设计表单的路线是设计users/sign_upregistrations/new.html.erb 相关联。我没有以/users 结尾的路线。这很奇怪,因为它有点不知从哪里创建了一条路线。我用更多信息编辑了我的问题;)
  • 面临同样的问题。

标签: ruby-on-rails ruby devise render


【解决方案1】:

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' 或使用路径辅助方法。

【讨论】:

  • 非常感谢@Igor!但是使用redirect_to,当第二次呈现表单时,我不会失去警报和自动完成的好处吗?
猜你喜欢
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
相关资源
最近更新 更多