我有一个链接,点击后会进行AJAX调用。这个AJAX调用将导致模态出现。
= link_to edit_evaluation_path(evaluation), remote: true
但是,当尝试从链接中打开一个新标签时(例如,通过鼠标中键单击它),我发现ActionController::UnknownFormat: ActionController::UnknownFormat
错误,因为操作不期望用html格式回复。这是来自相应操作的respond_to
代码:
respond_to do |format|
format.js
end
如何阻止用户在另一个标签页或窗口中打开链接?我是否有义务将link_to
更改为button_to
?谢谢!
答案 0 :(得分:3)
我为今天运行的这个问题创建了仅限Javascript的解决方案。
$.each($("a[data-remote='true']"), function(i, val) {
$(val).data("url", $(val).attr("href")).attr("href", "javascript:void(0);")
});
$.rails.href = function(el) {
var $el = $(el);
return $el.data('url') || $el.data('href') || $el.attr('href');
}

它将直接替换网站上的所有数据远程链接
答案 1 :(得分:0)
我为此设计了一种解决方法。这包括两个步骤:
可以覆盖确定远程链接的目标URL的jquery-ujs函数。因此我们在检查href之前覆盖它以选择数据属性。
$.rails.href = function(el) {
var $el = $(el);
return $el.attr('data-url') || $el.attr('data-href') || $el.attr('href');
}
接下来,我们创建一个类似于链接的自定义帮助器,它输出数据属性中的url而不是href。
def pseudo_link_to(name = nil, options = nil, html_options = nil, &block)
html_options, options, name = options, name, block if block_given?
options ||= {}
html_options = convert_options_to_data_attributes(options, html_options)
url = url_for(options)
html_options["data-href".freeze] ||= url
html_options['href'] = 'javascript:void(0)'
content_tag("a".freeze, name || url, html_options, &block)
end
请注意,实际的href是javascript:void(0)
,javascript no-op。
现在,您所要做的就是在rails视图中使用pseudo_link_to
helper而不是link_to
。