Rails - 转到索引,但也可以通过相同的点击提交表单
Rails - go to index, but also submit form with the same click
我有一个重定向可以很好地让我进入我的索引。如下:
redirect_to action: :index, filters: { recent_price_change: "#{1.week.ago.strftime('%m/%d/%Y')} - #{Date.today.strftime('%m/%d/%Y')}" }, hide_filters: true
事实是,我在点击时填充过滤器。在同一页面上有一个标记有提交操作的按钮。
这里是 HAML 的摘录(它有点像 ERB...别担心,只要注意它是如何输入的:提交)包含它的文件:
%button.btn.btn-primary.btn-sm{ type: 'submit', style: 'background-color: #a38672;' }
%span.glyphicon.glyphicon-play
Update List
点击上面的按钮提交表单,应用过滤器将一些结果显示在屏幕上的 table 中。
这个 was/is 一切都很好 - 但有一个新要求,我希望提交按钮在重定向时成为 "automatically clicked"。 AKA,我不想手动单击此按钮...相反,作为重定向的一部分,需要提交表单。所以当页面加载时,就好像我刚刚点击了按钮 - 数据被填充等等。你们都知道如果这是 possible/how 我会这样做吗?我已经翻阅了 redirect_to 操作的文档,希望能在那里找到一些帮助 - 但到目前为止还没有骰子。
更新:
我补充了:
document.querySelector('.button.btn.btn-primary.btn-sm').click();
像这样放到文件末尾的 haml 中:
:javascript
document.querySelector('.button.btn.btn-primary.btn-sm').click();
它确实在加载时提交了表单...但事实证明我的索引页面必须一遍又一遍地重新呈现...它反复单击按钮。它不会只做一次。想知道是否有某种方法可以将其绑定到 onload。
更新 2:
所以我写了
firstSubmit = function() {
document.querySelector('.button.btn.btn-primary.btn-sm').click();
};
$(document).on('page:load', firstSubmit);
问题是...似乎我的页面正在反复重新加载。然后,它一遍又一遍地向我的按钮发送垃圾邮件,导致页面的总流量。无论如何要限制它而不会变得非常笨拙(全局变量? - 我讨厌)?
您可以将标志变量添加到表单(假设表单操作重定向到 index
):
= hidden_field_tag :do_not_redirect
%button.btn.btn-primary.btn-sm{ type: 'submit', style: 'background-color: #a38672;' }
%span.glyphicon.glyphicon-play
Update List
然后修改javascript:
- unless params[:do_not_redirect]
:javascript
$(document).on('page:load', function () {
$('#do_not_redirect').val(1);
$('.button.btn.btn-primary.btn-sm').click();
});
和控制器:
redirect_to action: :index, filters: {
recent_price_change: "#{1.week.ago.strftime('%m/%d/%Y')} - #{Date.today.strftime('%m/%d/%Y')}"
}, hide_filters: true, do_not_redirect: params[:do_not_redirect].presence
我想你想做的是利用回调。不确定您是否熟悉,但回调只是您 运行 在其他一些操作发生后的例行程序。在这种情况下,在单击提交按钮(很可能是 after_save 或 after_commit 回调)后,您希望重定向到索引。在这种情况下,回调通常位于控制器的顶部,如下所示:
class SomeController < ApplicationController
after_save :go_to_index
然后,在您的正常控制器操作之后:
private
def go_to_index
// Redirect code
end
我认为这就是您要查找的内容,您可以在此处找到回调 api 信息:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html。
我有一个重定向可以很好地让我进入我的索引。如下:
redirect_to action: :index, filters: { recent_price_change: "#{1.week.ago.strftime('%m/%d/%Y')} - #{Date.today.strftime('%m/%d/%Y')}" }, hide_filters: true
事实是,我在点击时填充过滤器。在同一页面上有一个标记有提交操作的按钮。
这里是 HAML 的摘录(它有点像 ERB...别担心,只要注意它是如何输入的:提交)包含它的文件:
%button.btn.btn-primary.btn-sm{ type: 'submit', style: 'background-color: #a38672;' }
%span.glyphicon.glyphicon-play
Update List
点击上面的按钮提交表单,应用过滤器将一些结果显示在屏幕上的 table 中。
这个 was/is 一切都很好 - 但有一个新要求,我希望提交按钮在重定向时成为 "automatically clicked"。 AKA,我不想手动单击此按钮...相反,作为重定向的一部分,需要提交表单。所以当页面加载时,就好像我刚刚点击了按钮 - 数据被填充等等。你们都知道如果这是 possible/how 我会这样做吗?我已经翻阅了 redirect_to 操作的文档,希望能在那里找到一些帮助 - 但到目前为止还没有骰子。
更新:
我补充了:
document.querySelector('.button.btn.btn-primary.btn-sm').click();
像这样放到文件末尾的 haml 中:
:javascript
document.querySelector('.button.btn.btn-primary.btn-sm').click();
它确实在加载时提交了表单...但事实证明我的索引页面必须一遍又一遍地重新呈现...它反复单击按钮。它不会只做一次。想知道是否有某种方法可以将其绑定到 onload。
更新 2:
所以我写了
firstSubmit = function() {
document.querySelector('.button.btn.btn-primary.btn-sm').click();
};
$(document).on('page:load', firstSubmit);
问题是...似乎我的页面正在反复重新加载。然后,它一遍又一遍地向我的按钮发送垃圾邮件,导致页面的总流量。无论如何要限制它而不会变得非常笨拙(全局变量? - 我讨厌)?
您可以将标志变量添加到表单(假设表单操作重定向到 index
):
= hidden_field_tag :do_not_redirect
%button.btn.btn-primary.btn-sm{ type: 'submit', style: 'background-color: #a38672;' }
%span.glyphicon.glyphicon-play
Update List
然后修改javascript:
- unless params[:do_not_redirect]
:javascript
$(document).on('page:load', function () {
$('#do_not_redirect').val(1);
$('.button.btn.btn-primary.btn-sm').click();
});
和控制器:
redirect_to action: :index, filters: {
recent_price_change: "#{1.week.ago.strftime('%m/%d/%Y')} - #{Date.today.strftime('%m/%d/%Y')}"
}, hide_filters: true, do_not_redirect: params[:do_not_redirect].presence
我想你想做的是利用回调。不确定您是否熟悉,但回调只是您 运行 在其他一些操作发生后的例行程序。在这种情况下,在单击提交按钮(很可能是 after_save 或 after_commit 回调)后,您希望重定向到索引。在这种情况下,回调通常位于控制器的顶部,如下所示:
class SomeController < ApplicationController
after_save :go_to_index
然后,在您的正常控制器操作之后:
private
def go_to_index
// Redirect code
end
我认为这就是您要查找的内容,您可以在此处找到回调 api 信息:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html。