如果新用户没有保存,我想呈现相同的页面

时间:2015-01-23 15:46:42

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

如果电子邮件空白,我想在同一页面上呈现。但是,当我留空而不是留在用户/新。它转到/用户。对于_from,它仍然呈现为URL不同。

     def new
    respond_with(user)
  end

  def create
    if user.save
      user.send_invitation
      redirect_to root_url, notice: "Signed up!"
    else
      render "/users/new"
    end
  end

  def destroy
    @user = User.find(params[:id])

    if @user.destroy
        redirect_to root_url, notice: "User was deleted successfully!"
    end
  end

  def edit
    respond_with(user)
  end

  def update
    params[:user].delete(:password) if params[:user][:password].blank?
    params[:user].delete(:password_confirmation) if params[:user][:password_confirmation].blank?
    if user.save
      redirect_to users_path, :notice => "Saved your updates!"
    else
      render :edit
    end
  end

2 个答案:

答案 0 :(得分:2)

render "/users/new"

只需在创建操作时呈现模板用户/新用户。所以URL保持/用户。

您可以尝试

  def create
    if user.save
      user.send_invitation
      redirect_to root_url, notice: "Signed up!"
    else
      redirect_to new_user_path
    end
  end

但是你将无法访问提交的参数,因此表格将是明确的。

答案 1 :(得分:0)

在这里,我认为这是一个路由问题,因为你想要保留URL。

在这种情况下,Rails会在提交表单后进行创建操作,如果由于某种原因记录未被保存(在这种情况下),则表示您正在呈现新操作但是对象有错误和数据。

要清理一下,你可以做点什么:

def create
 if user.save
   user.send_invitation
   redirect_to root_url, notice: "Signed up!"
 else
   render :new
 end
end

在我看来,不要试图以这种方式弯曲Rails,你会遇到很多问题,并且持久保存URL真的很重要吗?

重定向不是一个选项,因为您将从请求中删除所有数据,因为它会因重定向而成为新请求。

希望这有帮助!