当点击链接时,如何将通知标记为已读?(rails)

8 浏览
0 Comments

当点击链接时,如何将通知标记为已读?(rails)

我在我的Rails应用程序中有一个通知系统。在我的通知模型中,我有:

消息

用户ID

已读

链接路径

以下代码非常适用于显示当前用户的通知,然后显示已读的通知。我循环遍历满足这个条件的每条记录,然后使用link_to @link,然后输出整个代码块。

基本上,整个块我可以点击它,然后它会带我到正确的记录。这个功能非常好用。

所有新通知的默认值为:read => false。

然而,当用户点击链接时,我尝试将:read => true传递给该记录,这样当我回来时,特定的通知将不再显示,因为它只显示:read => false的通知。

如何最简单地解决这个问题?我试过将所有东西包装在form_for中,并尝试将:read => true的值传递给该记录,但我无法让它工作。有什么想法吗?

控制器

    @x = Notification.where(:user_id =>  current_user, :read => false)

视图

   <% @x.where(:user_id =>  current_user).each do |notify| %> 
   <% @link = notify.link_path %> 
   <%= link_to @link do %>
        <%= notify.message %>
        <%= time_ago_in_words(notify.created_at )%> 之前
  <% end %> 
  <% end %> 

0
0 Comments

问题的原因是想要在用户点击链接时更新特定通知的"read"属性。解决方法是使用控制器方法来更新该属性。在控制器中,可以找到相应的通知,并更新其"read"属性。更新后,通知将不再显示在未读列表中。另外,可以在控制器中查询当前用户的所有未读通知,然后在视图中使用".each"方法即可。

需要注意的是,链接的路径不包含通知对象的ID,因此需要将其作为查询参数传递。Rails生成的URL助手接受一个哈希作为参数,并将其包含在查询字符串中。所以,可以将ID添加到查询参数中。如果链接中没有或者传递的ID无效,需要处理相应的情况。

链接路径应该是一个Rails生成的URL助手,可以将ID添加到查询参数中,以实现所需的功能。

最后,问题得到了解决,感谢帮助。

0