Рассматривали ли вы использование вспомогательной функции? В вашем случае я бы сделал что-то подобное в app / helpers / user_helper.rb:
def show_attribute(user, attribute_name)
preference = "show_#{attribute_name}"
if current_user.has_role?(:admin) or
!user.respond_to?(preference) or
(user.respond_to?(preference) and user.send(preference))
return user.send(attribute_name)
else
return "hidden"
end
end
Вы можете использовать его в своих представлениях следующим образом:
<%=h show_attribute(@user, :email) %>
<%=h show_attribute(@user, :address) %>
С уважением.