Rails远程链接更新记录,也打开链接

时间:2015-10-13 02:03:08

标签: javascript ruby-on-rails ajax onclick

我的应用包含引文模型,属于客户端模型。每个引用都只是客户在某些第三方目录上的本地商户列表,例如yellowpages.com。

因此,在我的客户端显示视图中,我拥有属于该客户端的所有商家信息,您可以点击“查看商家信息”链接,打开该商家信息的网址,如下所示:

<%= @citations.each do |c| %>
  <%= link_to "View Listing", c.listing_url, target: '_blank' %>
<% end %>

单击链接时,我想使用ajax调用控制器中的方法,该方法在打开链接之后更新该记录的“updated_at”列。我可以使用远程构建方法吗?或者我是否必须编写自己的javascript事件监听器?

1 个答案:

答案 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 %>");