Rails重定向而不是使用对象渲染?

时间:2012-02-15 16:48:41

标签: ruby-on-rails

我对我正在关注的教程有疑问。有一个代码的注册部分,当验证未通过时,Rails再次呈现该操作。这一切都运作良好,但显然URL看起来不一样:

http://localhost:3000/signup - 在按下按钮之前

http://localhost:3000/Users - 点击按钮后显示无效的详细信息

这是代码:

@user = User.new(params[:user])
if @user.save
flash[:success] = "Welcome to the Sample Application!"
redirect_to @user
else
    render 'new'
end

是否仍然使用redirect_to传递@user对象,以便显示正确的URL 使用@user输入的详细信息填充表单(使用form_for)?

2 个答案:

答案 0 :(得分:0)

调用渲染只是告诉它基本上现在使用那部分。因此,即使渲染的视图不同,URL仍然匹配指定的操作(在本例中为/ Users)。

以下是使用redirect_to的方法:

redirect_to new_user_path(@user)

您也可以使用以下参数显式:

redirect_to some_path({:data => 1, :var => 2})

答案 1 :(得分:0)

不,至少不是真的,因为redirect_to让服务器响应HTTP重定向响应,这使得客户端获取指定的URL。这意味着在新的上下文中调用相应的Rails操作,这使得无法访问像用户对象这样的局部变量。 您唯一能做的就是将用户保存在数据库中(可能在一些特殊的临时表中)然后将id作为get参数传递或将数据保存在cookie中并在被调用的操作中检索它以设置值一个新的用户对象。 但是对我而言,只要拥有正确的网址,这两个选项似乎都不值得。