因此,我将Post创建表单移到了自己的partial中,并在所有必要的页面上包含了此partial。请注意,Partial中的表单POST到/questions(路由到PostsController :: create-这是默认的rails行为)。
我遇到的问题是,当未正确完成Post表单时,默认情况下,PostsController :: create方法会呈现questions / new.html.erb,即使该表单是从主页(/ home / index.html.erb)提交的。
我尝试更改部分中的表单,以提交“submitting_controller”和“submitting_action”,并在PostsController :: create中,当@post.save?== false时,渲染动作=>“../ submitting_controller / submitting_action”(这有点hacky,但可以让您从非PostsController呈现操作)。
这似乎在表面上工作正常。不完整的表单在提交它的视图中呈现,其中包含所有正确的@post.errors消息等。问题是所有其他页面上的数据都没有显示出来,因为实际的submitting_controller / submitting_action方法没有被调用,只呈现了相关视图。(记住,我进行了保留实例对象的呈现,而不是不保留@post实例对象的redirect_to,后者具有所有错误消息和提交的值。)
就我所看到的,我有两个选择:
1)当@post.save?在PostsController :: create中失败时,在重定向到submitting_controller / submitting_action时将@post对象存储在会话中,此时我从会话中取出@post对象并使用它重新填充表单/错误消息。(据我所知,在Rails中存储对象是不好的做法)
2)我可以将用于提取非Post创建表单数据的所有逻辑从各个submitting_controller / submitting_action中移动到ApplicationController中,在PostsController :: create中创建一个巨大的switch语句,针对submitting_controller / submitting_action,并调用ApplicationController中的方法来获取每个提交页面所需的所有额外数据。
您认为在Rails中最好的方法是什么?