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