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被认为是私有的,并且除了这些属于谁之外不向用户显示.
我想知道这是解决这个问题的最佳方法,还是有其他办法.提前致谢.
我认为你可以序列化用户想要在数组中私有的字段(而不是散列).喜欢[: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)
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |