我有一个Profile模型,它有很多属性,如电子邮件,图像,年龄,地址等.
最终用户可以将某些属性设为私有,以便其他用户无法查看该属性.
我通过向表private_attr添加一个列并将其序列化以存储如下的哈希来解决此问题: –
最终用户可以将某些属性设为私有,以便其他用户无法查看该属性.
我通过向表private_attr添加一个列并将其序列化以存储如下的哈希来解决此问题: –
{email: true,address: true,age: false }
解决方法
我认为你可以序列化用户想要在数组中私有的字段(而不是散列).像[:email,:address](使用你的例子)
然后,当您渲染视图时,只需检查该列中是否存在该字段.就像是
<%= user.email unless user.private_fields.include?(:email) %>
您甚至可以将该逻辑提取到视图助手以避免重复.
<%= show_if_allowed(user,:email) %>
然后创建一个这样的帮助器
def show_if_allowed(user,field) user[field] unless user.private_fields.include?(field) end