我正在使用Rails 4并从CakePHP转移。
我有一个用户模型并创建一个新记录,它使用两个操作 - 新建和创建。
现在我想要超越我的应用程序的默认值。我希望用户转到注册操作来创建新用户。现在,当我有一个服务器端验证并且它失败时,我发布表单让我们说"创建"用户显示在网址
中的操作' app.com/user/create'而不是' app.com/user/signup'
有没有办法让用户保持相同的操作,而不是只是为了显示表单并保存表单而有多个操作?
# GET /users/new
def new
@user = User.new
end
# POST /users
def create
@user = User.new(user_params)
if @user.save
redirect_to @user, notice: 'User was successfully created.'
else
render :new
end
end
答案 0 :(得分:1)
当用户创建失败时,您只需在创建操作中添加重定向即可。
redirect_to :back, @user
我建议不要一直使用:back
,但现在通过理解你提到的场景会有所帮助。
答案 1 :(得分:1)
默认情况下,操作new
只需使用或不使用参数初始化模型。操作create
将模型保存到数据库。 app.com/user/create
不是RESTful和" Rails Way"。
users_path #=> app.com/users
new_user_path #=> app.com/users/new
user_path(:id) #=> app.com/user/:id
edit_user_path(:id) #=> app.com/user/:id/edit
# and so on
在控制器中,您可以为每个操作定义重定向。例如:
def create
if @user.save
redirect_to user_path(@user)
else
redirect_to :back # return to previous page
end
end
有关此处路由的详细信息:http://guides.rubyonrails.org/routing.html
答案 2 :(得分:1)
我会坚持使用rails惯例,但如果你真的想要
,你应该能够做到这一点的routes.rb
get 'signup', to: 'users#signup'
post 'signup', to: 'users#signup'
控制器
class UsersController < ApplicationController
def signup
if request.get?
@user = User.new
elsif request.post?
@user = User.new(user_params)
if @user.save
redirect_to root_url, notice: 'Signed In'
else
#should just render signup as it's signup action
end
end
end
end