【问题标题】:Multiple recipients of activity多个活动接受者
【发布时间】:2015-03-28 20:08:01
【问题描述】:

我想使用this (public_activity) gem 创建新闻源。有一个 recipient_id 列,用于活动的一个接收者。但是,在大多数情况下,我有多个收件人(例如,向所有关注特定记录的人显示活动)- 收件人的数量可能超过 100 个,这是一次创建和显示的大量单独记录。

最好的方法是什么?

我找到了this suggestion,虽然我无法让它工作并且我得到了很多错误。

一种解决方案可能是创建一个自定义列

t.text :user_recipients

应获取活动的用户的存储 ID(例如,因为他们可能正在关注特定记录)。然后,检查 current_user.id 是否属于那组数字。这组数字 ("1, 3, 4") 将首先被转换为数组 ([1, 3, 4]) 我们可以使用array.include?(current_user.id)

这是一个好方法吗?

此外,user_recipients 列为空的记录也不会显示。

最后,我们应该得到这样的结果:

@activities = PublicActivity::Activity.where(/records where current_user.id belongs to user_recipients array/ + /column is not empty/)

【问题讨论】:

  • 你能解释一下你的模型结构吗
  • 具体是什么型号?
  • user_recipents 这是什么型号的?为什么是文本而不是单独的表格?
  • 哦,那应该是活动表中的 custom_column - github.com/pokonski/public_activity#migration - 它将存储应该获取活动的用户的 ID。你会怎么做 - 有没有更有效和更好的方法?
  • 好的,我现在明白了,我还没有阅读 gem README,但是这个接收者关系不能是一个表,这个当前的方法有点糟糕,唯一的方法是稍微多一点有效的方法是使用like 在字段中进行文本搜索

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

在字符串中搜索时有 4 种可能性

  • id 在字段的开头
    例如:“id, 2, 3”
  • id 在字段的末尾
    例如:“1, 2, id”
  • id 位于字段的中间
    例如:“1, id, 3”
  • id 是字段中唯一的数字
    前“身份证”

这就是我认为查询的样子

@activities = PublicActivity::Activity.where(
  "user_recipients LIKE ':id,%' or 
   user_recipients LIKE '%, :id' or
   user_recipients LIKE '%, :id,%' or
   user_recipients = ':id'", id: current_user.id)

我不能做一个简单的LIKE %id%的原因是这会匹配部分数字,这意味着id = 5将匹配[1, 10, 15]虽然没有5,但15匹配,所以我需要检查逗号, 以确保我没有选错号码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2022-08-12
    相关资源
    最近更新 更多