2

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

用户可以通过AJAX一一清除通知,该部分工作正常。

我想给用户一个“全部删除”选项。很像 Android 的通知中心。

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

4

3 回答 3

2

我会在destroy_all_notifications_path没有任何 id 的情况下发布,并在控制器上销毁登录用户的所有通知。

于 2013-04-19T16:48:26.210 回答
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) %>
于 2013-04-19T16:49:29.807 回答
1

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

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

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

我会在下面创建一个文件夹usersapp/controllers并在其中创建notifications_controller.rb. 然后在这个控制器中,我将执行该destroy操作。最后,在路由中,我需要像这样指定控制器:

resources :user do
  resource :notifications, only: :destroy, controller: 'users/notifications'
end
于 2017-08-29T13:59:45.867 回答