我的应用包含引文模型,属于客户端模型。每个引用都只是客户在某些第三方目录上的本地商户列表,例如yellowpages.com。
因此,在我的客户端显示视图中,我拥有属于该客户端的所有商家信息,您可以点击“查看商家信息”链接,打开该商家信息的网址,如下所示:
<%= @citations.each do |c| %>
<%= link_to "View Listing", c.listing_url, target: '_blank' %>
<% end %>
单击链接时,我想使用ajax调用控制器中的方法,该方法在打开链接之后更新该记录的“updated_at”列。我可以使用远程构建方法吗?或者我是否必须编写自己的javascript事件监听器?
答案 0 :(得分:2)
要实现您要求的确切行为,我建议您编写自己的javascript事件监听器。但是,这是一种具有几乎相同效果的替代方法。它使用ajax链接命中你的控制器,但是在你的Rails应用程序响应之后,新的浏览器选项卡才会打开。
将您的链接更改为以下内容:
<%= @citations.each do |c| %>
<%= link_to "View Listing", {:controller => :citations, :action => :my_action, :citation_id => c.id}, :remote => :true %>
<% end %>
在控制器中,加载引文并进行触摸:
class CitationsController < ApplicationController
def my_action
@citation = Citation.find( params.require(:citation_id) )
@citation.touch # updates the updated_at column
end
end
在回复视图my_action.js.erb
中,在新的浏览器标签/窗口中打开listing_url:
// same effect as a link with target = _blank
window.open("<%= j @citation.listing_url %>");