销毁rails中的所有控制器操作

时间:2013-04-19 16:45:22

标签: ruby-on-rails controller

我有一个Notification模型。总而言之,这个模型并不重要,只是为了通知用户。我没有理由保留这些数据。

用户可以通过AJAX逐个清除他们的通知,那部分工作正常。

我想为用户提供“全部删除”选项。与Android的通知中心非常相似。

这是客户控制器操作的最佳方法吗?或者我会使用删除控制器并传递用户ID和某种标记以删除所有?

3 个答案:

答案 0 :(得分:2)

我会在destroy_all_notifications_path中发布,没有任何ID,并且在控制器上销毁所有已登录用户的通知。

答案 1 :(得分:1)

您应该在Notification控制器中声明一个新动作:

 def destroy_all
   @user.notifications.each(&:destroy)
 end

然后将其添加到您的路线

 map.resources :users do |user|
   user.resources :notifications, :collection => { :destroy_all => :delete }
 end

不要忘记检查@user是否为current_user!

在您看来,使用链接销毁。

 <%= link_to_remote :destroy_all_notifications_user_path(current_user) %>

答案 2 :(得分:1)

最近我自己偶然发现了这个,这就是我解决这个问题的方法。首先,用户通知的集合可以建模为RESTful资源。但是,此资源不能具有ID,并且用户只能拥有一个通知集合,而不是很多。这就是为什么我会将其建模为像这样的单一资源:

resources :user do
  resource :notifications, only: :destroy
end

这会给我RESTful路由DELETE /users/:user_id/notifications。现在,问题在于,默认情况下,Rails会将此路由分配给NotificationsController#destroy。由于您已经将此操作分配给销毁个别通知,因此您必须为资源&#34; user_notifications&#34;创建单独的控制器。

我在users下创建了一个文件夹app/controllers,其中我创建了notifications_controller.rb。然后在此控制器中,我实施destroy操作。最后,在路线中,我需要像这样指定控制器:

resources :user do
  resource :notifications, only: :destroy, controller: 'users/notifications'
end