我有一个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
我想补充一点,管理员也可以删除已经有效的订阅者......
答案 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请求)。这就是我最终做的事情。
谢谢!