Rails - 是否可以使用params重定向到自定义路径?

时间:2016-12-11 15:15:58

标签: ruby-on-rails ruby ruby-on-rails-4 authentication authorization

所以我正在建立一个授权系统。新的注册页面设置为' /注册'。如果注册无效(已经使用了用户名,密码太短),我想显示错误。当我这样做时:

@user = User.create(user_params)
    if @user.save
        session[:user_id] = @user.id
        redirect_to stories_path, notice: "Thanks for registration!"
    else
        render 'new'
    end

它有效,但它会在' / users'而不是' /注册'。而不是

渲染'新'

我写

redirect_to' /注册'

重定向,但不显示错误。是否可以重定向到' /注册'并保留错误?

user.rb:

class User < ActiveRecord::Base
    has_secure_password
    validates :username, presence: true, :uniqueness => { :case_sensitive => false }
    validates :password, presence: true, :length => {minimum: 6}
end

users_controller.rb:

class UsersController < ApplicationController
    def new
        @user = User.new
    end

    def create
        @user = User.create(user_params)
        if @user.save
            session[:user_id] = @user.id
            redirect_to stories_path, notice: "Thanks for registration!"
        else
            render 'new'
        end
    end

    private

    def user_params
        params.require(:user).permit(:username, :password)
    end
end

new.html.erb:

<h3>New registration</h3>

<%= simple_form_for @user do |f| %>
   <div> <%= f.input :username %>
    <%= f.error :username %></div>
    <div><%= f.input :password %>
    <%= f.error :password %></div>

    <%= f.button :submit %>
<% end %>

和routes.rb:

Rails.application.routes.draw do
  root 'stories#index'
  resources :stories
  resources :users
  get 'signup' => 'users#new'
end

1 个答案:

答案 0 :(得分:1)

  

它有效,但它会在&#39; / users&#39;而不是&#39; /注册&#39;

这是正常行为。 /signup页面是来自new的{​​{1}}操作的结果。此页面包含表单。提交此表单后,数据将从同一控制器转至UsersController操作,但需通过create方法。

如果验证失败,控制器将呈现POST模板,因为您记得:new操作有create链接。因此,您会在/users链接中看到:new模板。

以下是/users的路线图:

UsersController

要达到您的要求,您可以添加路线 GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy 。并以表格形式更改网址。

这样的事情:

routes.rb

以形式:

post 'signup` => 'users#create`