ruby-on-rails - 将配置文件模型的某些属性设置为对其他用户公开(可见)或私有(private)(不可见)的最佳方法是什么?

标签 ruby-on-rails ruby activerecord serialization

我有一个 Profile 模型,它有很多属性,比如电子邮件、图像、年龄、地址等。 最终用户可以将某些属性设为私有(private),以便其他用户无法查看。 我通过向表 private_attr 添加一列并将其序列化以存储哈希来解决这个问题:-

{email: true, address: true, age: false }

这里的属性作为具有值 true 的键被认为是私有(private)的,不会向除这些属性所属的用户以外的用户显示。

我想知道这是解决这个问题的最好方法,还是有其他方法。 提前致谢。

最佳答案

我认为您可以只序列化用户希望在数组中私有(private)的字段(而不是散列)。像 [:email, :address] (使用你的例子)

然后,当您呈现 View 时,只需检查该字段是否存在于该列中。有点像

<%= user.email unless user.private_fields.include?(:email) %>

您甚至可以将该逻辑提取到 View 助手中以避免重复。

<%= show_if_allowed(user, :email) %>

然后像这样创建一个助手

def show_if_allowed(user, field)
    user[field] unless user.private_fields.include?(field)
end

关于ruby-on-rails - 将配置文件模型的某些属性设置为对其他用户公开(可见)或私有(private)(不可见)的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236778/

相关文章:

javascript - SVG/Raphael,如何在 JavaScript 中实现 DOT 算法? (图组织)

javascript - 如何在 ruby​​ on Rails 中从 java 脚本调用 ROR 方法?

ruby - 所有服务都可以通过 Azure SDK for ruby​​ 配置

mysql - 使用 Codeigniter 的事件记录模式进行 UNION 查询

sql - Rails3:具有散列替换(如.where())的SQL执行

ruby-on-rails - 与祖先建立家庭关系模型?

ruby-on-rails - 在 Rails 应用程序中连接到 Google Analytics API

ruby-on-rails - counter_cache 在 after_create 钩子(Hook)中是陈旧的

ruby 正则表达式从字符串末尾开始匹配

database - yii2 find with() - 它有什么用?