【问题标题】:Rails redirect instead of render with object?Rails 重定向而不是用对象渲染?
【发布时间】:2012-02-15 16:48:40
【问题描述】:

我对正在学习的教程有疑问。有一个注册部分的代码,当验证没有通过时,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)?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

    以下是使用 redirect_to 的方法:

    redirect_to new_user_path(@user)
    

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

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

    【讨论】:

    • 唯一的问题是我无法将用户对象传递到那个新位置。我需要使用该用户对象来填充表单并读取错误
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多