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