如何从Mail内的链接调用destroy动作

时间:2014-05-11 08:44:57

标签: ruby-on-rails actionmailer

我有一个Subscriber模型,它是在有人订阅时创建的。到那时,我向订阅者(个人)发送一封电子邮件,通知订阅。 在那封邮件中,我想要包含一个删除订阅的链接,但我无法在销毁操作中获取它,而是转到show动作。

我在邮件模板中的link_to代码就是这个

= link_to 'this link', controller: "subscribers", action: "destroy", id: @subscription, token: @subscription.token, only_path: false

我想调用destroy操作以删除订阅。

我尝试使用Google搜索但未找到通过邮件程序调用的删除操作的示例

顺便说一句,我使用mailcatcher来测试邮件程序

更新

这是我要求的销毁行动代码

def destroy
  #@subscriber being fetch through before filter
  @subscriber.destroy
  flash[:success] = "Subscription was deleted."
  redirect_to subscribers_path 
end

我想补充一点,管理员也可以删除已经有效的订阅者......

2 个答案:

答案 0 :(得分:1)

这样的事情:

= link unsubscribe_subscribtions_url(@subscription, token: @subscription.token)

应用程序/控制器/ subscriptions_controller.rb

class SubscriptionsController
  . . .
  def unsubscribe
    unless params[:token]
      @subscription = Subscription.find(params[:token])
      @subscription.destroy if @subscription.token == params[:token]
      redirect_to subscriptions_path, flash: { notice: 'Your email was unsubscribed' }
    end
  end
end

配置/ routes.rb中

. . .
resources :subsriptions do
  collection do
    get :unsubscribe # http://example.com/subscriptions/unsubscribe?token=xxxxxx
  end
end
. . .

像这样的东西

答案 1 :(得分:1)

对不起似乎这个问题有点重复...... can't generate delete link in rails mailing view

  

我认为原因不起作用是因为:method => :删除   用javascript处理,因为点击链接   电子邮件,javascript不会被触发。我试图解决的方式   这是通过将参数传递给url,例如" delete = true"和   用控制器中的那个处理它。

所以我所做的就是创造了一条新路线

resources subscribers do
  member do
    get :unsubscribe
  end
end

在我使用的邮件程序视图中

link_to 'this link', controller: "subscribers", action: "unsubscribe", id: @subscription, token: @subscription.token, only_path: false

我只是使用偏执来标记删除的订阅。这将是销毁和取消订阅行动之间的区别..

<强>更新

另一种广泛使用的模式是,电子邮件中的链接会重定向到您的应用程序的表单(带有put,post或delete请求)。这就是我最终做的事情。

谢谢!