当点击链接时,如何将通知标记为已读?(rails)
当点击链接时,如何将通知标记为已读?(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 %>
问题的原因是想要在用户点击链接时更新特定通知的"read"属性。解决方法是使用控制器方法来更新该属性。在控制器中,可以找到相应的通知,并更新其"read"属性。更新后,通知将不再显示在未读列表中。另外,可以在控制器中查询当前用户的所有未读通知,然后在视图中使用".each"方法即可。
需要注意的是,链接的路径不包含通知对象的ID,因此需要将其作为查询参数传递。Rails生成的URL助手接受一个哈希作为参数,并将其包含在查询字符串中。所以,可以将ID添加到查询参数中。如果链接中没有或者传递的ID无效,需要处理相应的情况。
链接路径应该是一个Rails生成的URL助手,可以将ID添加到查询参数中,以实现所需的功能。
最后,问题得到了解决,感谢帮助。