我正在开发一个 Rails 2.3.1 网站。在整个网站中,我需要有一个用于在各个页面(主页、创建帖子页面、帖子列表页面、评论列表页面等)上创建帖子的表单——我只想说这个表单需要在许多页面上各种控制器)。这些页面中的每一个都显示在相应的控制器/操作中检索到的各种其他信息。例如,主页列出了最新的 10 个帖子、从数据库中提取的内容等。
因此,我已将帖子创建表单移至其自己的部分中,并将此部分包含在所有必要的页面上。请注意,部分 POST 中的表单到 /questions(路由到 PostsController::create - 这是默认的 rails 行为)。
我遇到的问题是当 Posts 表单没有正确完成时,默认情况下 PostsController::create 方法会渲染问题/new.html.erb,即使表单是从主页提交的(/home/index.erb)。 html.erb)。
我尝试在部分中更改表单以提交“submitting_controller”和“submitting_action”,并在 PostsController::create 中,当 @post.save? == false,我渲染动作 =>“../submitting_controller/submitting_action”(这有点 hacky,但可以让您从非 PostsController 渲染动作)。
这在表面上似乎工作正常。不完整的表单在提交它的视图中呈现,并带有所有正确的@post.errors 消息等。问题是页面上的所有其他数据都没有显示,因为没有调用实际的 submit_controller/submitting_action 方法,只是关联的视图。(请记住,我做了一个保留实例对象的渲染,而不是不保留具有所有错误消息和提交值的 @post 实例对象的 redirect_to。)
据我所知,我有两个选择:
1)@post.save 时我可以将@post 对象存储在会话中吗?PostsController::create, redirect_to submit_controller/submitting_action 失败,此时我将@post 对象拉出会话并使用它重新填充表单/错误消息。(据我了解,在会话中存储对象在 Rails 中是不好的做法)
2)我可以将所有用于从各种submitting_controller/submitting_action中拉取非post创建表单数据的逻辑,放到ApplicationController中,在PostsController::create中为submitting_controller/submitting_action创建一个巨大的switch语句并调用其中的方法ApplicationController 来获取每个提交页面渲染所需的所有额外数据。
关于在 Rails 中执行此操作的最佳方法的想法?