设置Profile模型的一些属性的最佳方法是公共(可见)还是私有(不可见)给其他用户?

Sac*_*ngh 6 ruby serialization activerecord ruby-on-rails

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

{email: true, address: true, age: false }
Run Code Online (Sandbox Code Playgroud)

这里作为具有值的密钥的属性true被认为是私有的,并且除了这些属于谁之外不向用户显示.

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

Die*_*ntz 6

我认为你可以序列化用户想要在数组中私有的字段(而不是散列).喜欢[:email, :address](使用你的例子)

然后,当您渲染视图时,只需检查该列中是否存在该字段.就像是

<%= user.email unless user.private_fields.include?(:email) %>
Run Code Online (Sandbox Code Playgroud)

您甚至可以将该逻辑提取到视图助手以避免重复.

<%= show_if_allowed(user, :email) %>
Run Code Online (Sandbox Code Playgroud)

然后创建一个这样的帮助器

def show_if_allowed(user, field)
    user[field] unless user.private_fields.include?(field)
end
Run Code Online (Sandbox Code Playgroud)