【问题标题】:Render w Params or Redirect w Errors in Ruby on Rails在 Ruby on Rails 中渲染 w 参数或重定向 w 错误
【发布时间】:2010-02-15 08:10:37
【问题描述】:

我正在使用 ruby​​ on rails 并且我的网站上有一些用户可以单击以保存的内容,它们会被重定向到包含登录和注册的页面,以便用户可以继续使用任一选项并保存内容。为显示正确的用户验证错误创建了一个问题,b / c我需要使用redirect_to users / new来传递带有用户正在保存的对象ID的参数,如果我使用render:new,错误是显示但对象 ID 丢失。有人对此有任何解决方案吗?

【问题讨论】:

    标签: ruby-on-rails validation redirect render


    【解决方案1】:

    将原始项目 ID 存储在会话中,继续您的正常登录/注册过程,完成后,如果会话中有保存项目,则重定向到处理保存的操作(它现在可以抓取该项目来自会话的 id 并继续)。

    【讨论】:

    • 以防万一:可能不是项目本身,而是它的 id)
    • 是的。已编辑以反映评论。
    • 出于好奇,在会话中保存对象本身有什么问题?这样我就不必执行第二次数据库查找来再次找到该对象。
    • 另外,如何将会话值放入保存的用户方法中,如 user.save_with(session[:object])。这样,我可以将对象保存(如果存在)放入用户保存的事务中。
    • 如果对象本身在会话中,我想你会遇到各种并发问题,更不用说存储尽可能少的数据总是最好的。
    【解决方案2】:

    “出于好奇,在会话中保存对象本身有什么问题?这样我就不必执行第二次数据库查找来再次找到该对象。” ——十杰克 (这应该是一个新的 StackOverflow 问题)

    在会话中保存项目是一件坏事 - 因为在您迁移模型对象的那一刻(例如添加列或类似的东西),会话中的数据现在不再是模型类型的有效对象。例如,它仍然有旧的属性列表而不是新的……它会显示为无效对象。

    这就是为什么最好只存储 id - 因为您将从数据库中获取一个新的、正确实例化的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多