ruby on rails错误表单重定向到现有页面并显示错误

时间:2014-03-26 17:46:27

标签: ruby-on-rails

所以,我正在尝试修复我们在POST中进行渲染的代码,这实际上为用户搞砸了后退按钮(以及刷新按钮!)。摆脱讨厌的“你确定要再次发布”通常只是转向POST-> redirect-> GET模式,但使用某种短暂的cookie来处理我需要传输的错误(如以及用户键入的cookie,以便他不会丢失输入)。在playframework中,这是flash cookie(在以下GET请求中删除)。

  1. 我可以假设在轨道上的ruby中,它也在我需要的闪存范围内吗?
  2. 保存所有错误PER输入框的模式或示例是什么,以便在GET上,ruby主要自动处理错误,因为我将它们粘贴到每个字段中? - 我正在使用simple_form_for
  3. 我是rails的完全新手,但在java中拥有大量重量级和轻量级http框架的经验。

    如果有人知道现有的一个,那么使用GET控制器方法和POST控制器方法的完整示例会非常惊人吗?

    在游戏中,我只是在我的帖子控制器方法中调用validation.keep()(保存错误)和params.flash()(保存用户输入),它会自动将错误映射到GET上的表单字段。我不做任何额外的事情。基本上是这样的(参见postUser方法)https://github.com/deanhiller/timecardz/blob/master/app/controllers/OurPattern.java

    我希望ruby也有一些简单的东西。

    感谢, 迪安

1 个答案:

答案 0 :(得分:3)

Rails没有开箱即用。对于它的价值,它的标准"在Rails中发布帖子后呈现。代码流是这样的:

  1. 使用不正确的数据执行POST到控制器
  2. Controller拉出相关模型实例,将其更改为无效状态,尝试保存
  3. 模型对象触发验证错误,保存不持久
  4. 在实例中输入错误消息' #errors方法
  5. 将同一个对象传递给要呈现的模板
  6. 表单处理程序,在这种情况下,simple_form_for(一个伟大的gem btw)看到#errors是非空的,并添加了css类和消息,但是它被配置为这样做。这应该"只是工作"如果没什么好笑的话。
  7. 因此,它实际上内置于rails中以获得您正在尝试解决的行为,因为它取决于整个渲染中的模型实例是相同的。

    也就是说,Rails确实有一次性闪存参数,因此您可以将发布的表单数据存储在闪存中,并在下一个请求中重新更新验证对象。只需注意在主要验证者之外进行任何验证的代码。例如,object.valid?object.save需要始终导致相同的错误,但没有什么可以阻止您(错误地)在before_save回调中添加验证错误。 / p>

    A similar SO postthis PRG github project看起来非常有用,可以避免在这里单打独斗。