加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails – 如何在某些事件上提供用户通知消息

发布时间:2020-12-17 02:03:44 所属栏目:百科 来源:网络整理
导读:我有铁路问题.我实际上解决了它,但我想这是一个更容易的方法. 我有用户/会员/组模型和用户/邀请/事件模型.成员加入用户和组.邀请加入用户和活动. 会员资格和邀请模式是平等的.组和事件确实有一些相同的不同列.成员资格/邀请模型都具有“已接受”的布尔列,这
我有铁路问题.我实际上解决了它,但我想这是一个更容易的方法.

我有用户/会员/组模型和用户/邀请/事件模型.成员加入用户和组.邀请加入用户和活动.

会员资格和邀请模式是平等的.组和事件确实有一些相同的不同列.成员资格/邀请模型都具有“已接受”的布尔列,这意味着被邀请到组/事件的用户必须在他是成员/参与者之前接受该邀请.

现在,如果用户登录所有组,则事件邀请应出现在列表中.事实上,我想稍后向系统添加更多通知,但事件甚至还没有包含在我的系统中.

我的解决方案是添加属于用户的通知模型.所以每个用户都有很多通知.此外,此模型是多态的,属于成员资格和邀请.

#user model
class User < ActiveRecord::Base
    has_many :memberships,:dependent => :destroy
    has_many :groups,:through => :memberships
    has_many :invitations,:dependent => :destroy
    has_many :events,:through => invitations
    has_many :notifications  

#membership model (equal to invitation model)
class Membership < ActiveRecord::Base
    belongs_to :user
    belongs_to :group
    has_one :notifications,:as => :noticeable

#group model (equal to event model but participants for members and invitation for membership)
class Group < ActiveRecord::Base
    has_many :memberships
    has_many :users,:through => :memberships   
    has_many :members,:through => :memberships,:source => :user,:conditions => ['memberships.accepted = ?',true]

#notification model
class Notification  < ActiveRecord::Base
    belongs_to :user
    belongs_to :noticeable,:polymorphic => true

我已经向数据库添加了一些数据,我在控制台中测试它

myUser = User.find(6) # will be exchanged with current_user in the actual program

我将通过每个操作完成所有通知…但是一开始我在一个通知上测试所有进一步的操作

myNotice = myUser.notifications.first

因此,myNotices的noticeable_type是会员资格还是邀请函,我会将其作为群组或事件通知呈现
在这种情况下,noticeable_type =成员资格

myGroup = Group.find(Membership.find(myNotice.noticeable_id).group_id)

– >您想加入群组“myGroup.name”吗?是的|没有

是是:Membership.find(myNotice.noticeable_id).accepted = true

在No:Membership.find(myNotice.noticeable_id).destroy

并且:myNotice.destroy

这就是我的想法.
这是解决问题的方法吗?

通过所有通知的“每个do”将在视图文件中.这意味着“Group.find(Membership.find(myNotice.noticeable_id).group_id)”必须在视图文件中或部分中.这有点难看吗?

我想我已经使用了很多“查找”,这意味着许多SQL查询.是不是有办法用任何“Ruby on Rails”来减少它们 – 可怕?

谢谢 :)

解决方法

需要类似我的应用程序,所以更新答案在这里,以防有人发现它有用.

#user model

   has_many :membership_notices,:through => :notifications,:source => :membership,:conditions => {"notifications.noticeable_type" => "membership"}

   has_many :event_notices,:source => :event,:conditions => {"notifications.noticeable_type" => "event"}

通知现在可以访问

user.membership_notices
  user.event_notices

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读