【问题标题】:How to do multiple actions from a single link_to如何从单个 link_to 执行多个操作
【发布时间】:2016-09-06 07:47:00
【问题描述】:

我有横幅图像,我想链接到外部网站,同时将用户点击记录到 clicks 表中,并在 users 表中向该用户的点添加一个点。

如何制作 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)

【问题讨论】:

  • 在这种情况下,您可以使用 java-script,只需通过 link_to 调用 app 方法,然后为该 link_to 事件创建一个 js 事件,并根据该事件打开新选项卡的外部链接

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


【解决方案1】:

您不能每次点击链接执行多项操作。无论如何都不是原生点击处理。

这里有两种方法:

  1. 使用 javascript 处理对横幅的点击。拦截事件,取消它的传播(e.preventDefault()),这样浏览器就不会跟随链接。然后通过使用 jquery 或其他东西手动调用必要的 url 来执行您的操作。完成注册点击和添加点后,通过分配 window.location.href 导航到所需的页面。

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

我会选择选项 2。

【讨论】:

    【解决方案2】:

    这可以帮助你。只需根据您的代码更改

    = 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      相关资源
      最近更新 更多