如何在Ruby on Rails应用程序中实现公告,每个用户控制读取/查看

时间:2016-06-12 14:46:32

标签: ruby-on-rails ruby activerecord

我想在我的Rails应用中实现网站范围的公告功能。

管理员可以创建公告并定义start_date和expiration_date。

我也想知道用户是否查看过公告,以及当他点击"解雇"它不再在视图中显示的公告。

在考虑之后,我正在考虑创建一个Has Many :through模型关联。基本上是User has_many Announcements through: UserAnnouncements

所以我会创建两个新模型,一个是前面的公告(管理员会设置文本,开始和结束日期)和一个连接表(UserAnnouncements),我可以在这里存储每个用户的信息。有关该公告的状态(基本上为vieweddismissed)。

这是一种合理的方法吗?

我现在的主要问题是创建公告。我有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会是什么样的?

1 个答案:

答案 0 :(得分:0)

当然你可以从头开始构建它,但我喜欢“不要浪费时间在非核心东西上”的想法。

话虽如此,您可以尝试Paul RevereStarbust宝石,两者都有目标向用户显示网站范围的公告。

例如,在设置Starbust之后,只需添加一个Starburst::Announcement.create(:body => "Our app now features lots of balloons! Enjoy!")的测试通知。

如果你想创造自己的,偷偷摸摸他们的来源也很有价值。