Ruby on rails RubyonRails中的部分负载模型

Ruby on rails RubyonRails中的部分负载模型,ruby-on-rails,ruby,activerecord,activemodel,Ruby On Rails,Ruby,Activerecord,Activemodel,伙计们!我正在努力做出正确的架构决策: 默认情况下,我需要对我站点的用户隐藏其他用户的某些字段。因此,不必费心过滤视图中的字段,我不想加载这些字段,如: default_scope -> { select(column_names - FILTERED_PARAMS) } 在特殊情况下,应显式加载其余字段 问题是,一旦代码引用缺少的字段,nomethod错误就会出现。我试图对这些字段进行元编程,但到目前为止没有结果。在我看来,这种方法不适合AR对象的生命周期 您是否实现过此类功能?如果是

伙计们!我正在努力做出正确的架构决策:

默认情况下,我需要对我站点的用户隐藏其他用户的某些字段。因此,不必费心过滤视图中的字段,我不想加载这些字段,如:

default_scope -> { select(column_names - FILTERED_PARAMS) }
在特殊情况下,应显式加载其余字段

问题是,一旦代码引用缺少的字段,nomethod错误就会出现。我试图对这些字段进行元编程,但到目前为止没有结果。在我看来,这种方法不适合AR对象的生命周期


您是否实现过此类功能?如果是,您选择了什么模式?

根据我的经验,最好的决定不是使用select筛选查询中的这些参数,而是筛选实际发送给用户的参数。my_model.as_json(具有给定的参数过滤选项)是一个简单的解决方案,但对于更高级的用途,我建议使用Rabl gem
这样,即使在非常高级的情况下,您也可以以模型-视图-控制器的方式更好地控制返回哪些参数。

谢谢!这个决定是由相当复杂的身份验证策略和每个角色的不同字段访问以及不同的输出决定的:除了html之外,rails服务器还服务于JSON端点。所以我不想弄乱视图级过滤器,并试图得到简单的解决方案。如果是这样的话,那么通常关于select,我认为它不需要数组作为输入变量。您需要类似->{select(*(允许的参数-不允许的参数))}