我想在典型的rails惯例之外做一些事情,我想听听你们的想法。
我有Test
模型,嵌套Questions
和Question_responses
,我有一个表单(使用simple_form_for
),用户可以在其中选择问题的答案一个测试。这一切都运行正常,但如果考生认为问题不好,我想添加Flag
功能。现在,我使用link_to
方法将用户带到允许他们创建标志的flag
控制器操作,并暂时保留测试id变量以将其带回测试。这一切都有效。
然而,正如人们可能会看到的那样,在用户前往创建标志之前,我没有保存测试的进度 - 因此,如果您在测试中途并标记了一个问题,那么您将失去进度。我有一个想法,但我不确定它是否适用于simple_form
:
我会将数据发布到tests_controller
中的其他一些操作,保存,重定向到创建flag
,然后重定向回测试(在编辑方法或类似的东西中) ),并允许用户完成测试。这应该有效,但是如何使用表单将视图发布到除了表单顶部simple_form_for @test, url:
指定的其他URL之外的其他URL?有没有办法根据用户点击的位置有条件地将数据发布到另一个URL,或者覆盖简单表单按钮对象的:submit
协议?我真的不确定,但我觉得以前有人必须做过这样的事情。
答案 0 :(得分:0)
如果其他人不熟悉rails并尝试解决类似的问题,我就是这样做的。
首先,我发现simple_form_for旨在发布到一个URL,这是您在simple_form_for函数的参数中指定的URL。但是,可以通过在调用simple_form_for函数之前在URL 上执行某些逻辑来有条件地更改表单发布的URL(请参阅this帖子)。
但是,在我的情况下,我想发布到不同的URL,这取决于单击表单中的“提交”按钮。但是正如我上面所说,这个功能并没有内置在simple_form中。从理论上讲,我想有一个javascript函数可以改变表单中的html数据并更新表单发布到的URL,如果用户将鼠标悬停在按钮或其他东西上,但这可能是不必要的复杂,除非你对我很熟悉(不像我)。最重要的是,有一种更简单的方法。
但是,您可以更改与表单的提交按钮相关联的参数(请参阅this帖子)。所以我做了什么,以及我鼓励其他人做的是更改与表单中特定按钮关联的参数,然后根据需要在表单发布到的控制器操作中应用逻辑。
在我的例子中,我在表单中创建了两个按钮 - 一个按常规方式提交测试数据的按钮和一个用于重定向到创建标志的测试提交按钮。在我重定向它们之前,我保存已经输入的任何表单数据(在tests_controller操作中)。然后,用户被重定向到标志控制器动作,并且他们可以以典型的rails方式创建标志。创建标志后,我将它们重定向回测试,但这次是在测试的编辑路径中。重新加载测试数据,用户可以继续创建测试。
如果有人想查看我这样做的代码,请在评论部分告诉我,我会编辑这个答案!