我有一个Notification
模型。总而言之,这个模型并不重要,只是为了通知用户。我没有理由保留这些数据。
用户可以通过AJAX逐个清除他们的通知,那部分工作正常。
我想为用户提供“全部删除”选项。与Android的通知中心非常相似。
这是客户控制器操作的最佳方法吗?或者我会使用删除控制器并传递用户ID和某种标记以删除所有?
答案 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