ruby-on-rails - 使用 RESTful session 在 Controller 之间传递数据

标签 ruby-on-rails controller

我在代码中使用了一个丑陋模式,我知道一定有更好的方法来做到这一点。帮助我重新思考我在做什么。

我的网站是一种论坛。对讨论的所有回复均在 DiscussionsController#show 页面上内嵌完成。

不过,有些回复是无效的 - 例如,如果您尝试发布不含文本的回复,它会返回 DiscussionsController#show 并显示一条错误消息。

以下是我如何实现此工作流程的简要概述:

  1. 用户转到 DiscussionsController#show。该模板上有一个回复表格。没有明确的 RepliesController#new 操作。
  2. 用户提交回复表单,该表单被发布到replies_path并在RepliesController#create中处理。
  3. RepliesController#create 无法保存回复,因为它无效(回复中的 validates_length_of 会使对象无效)。
  4. RepliesController#create 将回复对象放入 session[:new_reply] 中并重定向到用户来自的discussion_path。
  5. DiscussionsController#show 处理 session 对象...

像这样:

if session[:new_reply]
  @new_reply = session[:new_reply]
  session.delete(:new_reply)
end

现在 show.html.erb 有一个新生成的 @new_reply 对象来检查错误。

这显然有问题 - 您不应该将整个对象存储在 session 中。但是,由于我们尝试在 RepliesController#create 中保存的 Reply 对象从未保存过,因此如何在 Controller 操作调用之间保留它?

或者如果有更大的设计解决方案,请随时分享。这太丑了,让我很痛苦。谢谢。

最佳答案

不做重定向,而是做 render :action => "discussions/show" 怎么样?我想说的是,您还必须设置 @discussion 变量,但这应该完成,因为回复是讨论中的嵌套资源,对吗?

关于ruby-on-rails - 使用 RESTful session 在 Controller 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/842963/

相关文章:

unit-testing - Grails 1.3.5 Controller 测试空命令对象

c# - 将大 List<T> 从 View 传递到 Controller 的最佳方法

ruby-on-rails - 如何以及在哪里处理关联记录的更新过程?

ruby-on-rails - rake db :migrate and rake db:create both work on test database, 不是开发数据库

ruby-on-rails - 如何在模块外部调用方法

ruby-on-rails - Rails,字符串长度的 DRY 默认验证器?

ruby-on-rails - Ruby on Rails - 第一个应用程序 - 没有创建index.html

ruby-on-rails - update_attributes 字段调整

Spring TEST REST Controller (消费/生成 JSON)- 无数据库,离线 - 使用 Mockito

java - Spring MVC 集成 Thymeleaf