如何从单个link_to执行多个操作

时间:2016-09-06 07:47:01

标签: ruby-on-rails-4 link-to

我想要链接到外部网站的横幅图片,同时将用户点击记录到点击表中,并在用户表格中为该用户的点添加一个点。

如何让link_to图像执行此操作?

目前,我的代码在下面,但它没有重定向,因为我将外部URL放在控制器中。此外,它不会调用用户控制器来记录点数,因为我不知道如何使用“link_to ... do end”调用多个动作:

index.html.haml

= link_to image_tag("http://res.cloudinary.com/../image.jpg", size: "100%", class: "img-fluid"), clicks_path(id: current_user.id, image_source: "abc"), method: :post, remote: true
# user_add_point_path(point: 2)

点击控制器

def create
  @click = current_user.clicks.create(user_id: params[:id], image_source: params[:image_source])
if @click.save
  if params[:image_source] == 'abc'        
    redirect_to abc.com

用户控制器

def add_point
  @user.increment!(:point)

2 个答案:

答案 0 :(得分:0)

每个链接点击您无法执行多项操作。无论如何都不是本机点击处理。

这里有两种方法:

  1. 使用javascript处理您的横幅广告。拦截事件,取消其传播(onButtonClick _),以便浏览器不会跟踪链接。然后通过使用jquery或其他东西手动调用必要的URL来执行您的操作。完成点击和添加积分后,例如,通过指定e.preventDefault()导航到所需的页面。

  2. 处理服务器上同一操作中的所有点击和点记帐。在该操作结束时,重定向。

  3. 我选择2。

答案 1 :(得分:-1)

这可以帮到你。只需根据

更改您的代码即可
= link_to image_tag("http://res.cloudinary.com/../image.jpg", size: "100%", class: "img-fluid"), 
          "your/url/path", id: current_user.id, image_source: "abc", 
          method: :post, remote: true