表单发布的Rails操作

时间:2014-05-28 08:54:55

标签: ruby-on-rails forms cakephp

我正在使用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

3 个答案:

答案 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