我想在我的Rails应用中实现网站范围的公告功能。
管理员可以创建公告并定义start_date和expiration_date。
我也想知道用户是否查看过公告,以及当他点击"解雇"它不再在视图中显示的公告。
在考虑之后,我正在考虑创建一个Has Many :through
模型关联。基本上是User has_many Announcements through: UserAnnouncements
。
所以我会创建两个新模型,一个是前面的公告(管理员会设置文本,开始和结束日期)和一个连接表(UserAnnouncements),我可以在这里存储每个用户的信息。有关该公告的状态(基本上为viewed
和dismissed
)。
这是一种合理的方法吗?
我现在的主要问题是创建公告。我有15k用户,如果我这样做,则需要相当长的时间来创建声明:
User.find_each do |user|
announcement = Announcement.new
announcement.user = user
announcement.save
end
这需要大约30秒才能运行。如果我有10万用户怎么办?
更合理的方法是创建Announcement
模型并将其显示给每个用户,unless
它有一个HideAnnouncement
模型user_id == current_user
?像这样的ActiveRecord会是什么样的?
答案 0 :(得分:0)
当然你可以从头开始构建它,但我喜欢“不要浪费时间在非核心东西上”的想法。
话虽如此,您可以尝试Paul Revere或Starbust宝石,两者都有目标向用户显示网站范围的公告。
例如,在设置Starbust之后,只需添加一个Starburst::Announcement.create(:body => "Our app now features lots of balloons! Enjoy!")
的测试通知。
如果你想创造自己的,偷偷摸摸他们的来源也很有价值。