Ruby on rails Rails模型忽略从其他表中特别选择的其他列

Ruby on rails Rails模型忽略从其他表中特别选择的其他列,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,这是密切相关的,但这个问题还不够深入 根据上面的问题,我从我的一个ActiveRecord模型运行了一个复杂的查询,该模型生成一种“报告”。它基本上是一个包含主要模型属性以及相关表中其他一些属性的巨大表 查询本身可以工作。我已经验证了生成的SQL是否正确执行,当粘贴到SQL终端时,我会得到结果(以及我想要的列)。不幸的是,模型中有专有信息,我不能在这里共享,而且查询太复杂,无法混淆。但是为了了解我在做什么,这是我的ActiveRecord查询的开始:permissions=permist.se

这是密切相关的,但这个问题还不够深入

根据上面的问题,我从我的一个ActiveRecord模型运行了一个复杂的查询,该模型生成一种“报告”。它基本上是一个包含主要模型属性以及相关表中其他一些属性的巨大表

  • 查询本身可以工作。我已经验证了生成的SQL是否正确执行,当粘贴到SQL终端时,我会得到结果(以及我想要的列)。不幸的是,模型中有专有信息,我不能在这里共享,而且查询太复杂,无法混淆。但是为了了解我在做什么,这是我的ActiveRecord查询的开始:
    permissions=permist.select('*').joins(“左连接交叉表('..

  • 我已经将ActiveRecord查询(如上)粘贴到Rails控制台中,它不仅执行得非常完美,而且还可以查询其他属性(不与我的应用程序中的任何模型或关联关联关联),很好-正是我想要的:

    >许可证。首先。申请人名称

    “戈登·拉姆齐”

问题是,当我在rails应用程序中执行代码(从浏览器执行)时,我可以访问每个许可证及其关联模型的属性,但在许可证上的附加选择会引发NoMethodError

我无法理解为什么Rails控制台允许我插入命令并工作,但是当我只在应用程序的方法中运行相同的代码时,它会引发一个错误

上面的问题似乎与此密切相关,公认的答案建议在控制台中尝试一些东西;但为什么控制台和Rails应用程序本身处理相同代码的方式不同(因为我假设Rails控制台是Rails应用程序的一个实例

有谁知道:

  • 我关于ActiveRecordRelationship忽略非模型属性的假设正确吗
  • 为什么Rails控制台允许我执行此查询并调用“额外”选定列,但Rails不允许
  • 是否有一种方法可以完成我需要做的事情-可能创建一个代理对象,或者将许可证模型强制转换为其他一些ActiveRecord对象,而这些对象不会“忽略/删除”select中的额外属性

  • 你所做的应该是可行的。我在我的项目中有很多查询,我从查询的记录中获得了附加属性,它在控制台中的工作方式与在Rails应用程序中的工作方式相同。尝试使用
    select('permissions.*,你的_other_model_pluralized.applicator_name'))
    然后是SQL的其余部分,然后查看
    申请人名称
    属性是否保持不变。如果没有,我怀疑您的代码中还有另一个您没有注意到的问题——例如,在调用
    许可证之前,您可能正在重新加载
    许可证
    。首先。申请人名称
    。我已经运行了permissions.first.attributes.keys和附加属性不存在,尽管在select中被调用。我理解你的意思,但没有意义。Rails确实允许你这样做。你是否尝试过运行调试器并检查
    许可证。首先。SQL执行后立即执行属性
    ?你所做的应该可以工作。我的数据库中有很多查询我从查询的记录中获取其他属性的项目,它在控制台中的工作方式与在Rails应用程序中的工作方式相同。尝试使用
    select('permissions.*,your_other_model_pluralized.applicator_name'))
    然后是SQL的其余部分,然后查看
    申请人名称
    属性是否保持不变。如果没有,我怀疑您的代码中还有另一个您没有注意到的问题——例如,在调用
    许可证之前,您可能正在重新加载
    许可证
    。首先。申请人名称
    。我已经运行了permissions.first.attributes.keys和其他属性不存在,尽管在select中被调用。我理解您的意思,但没有意义。Rails允许您这样做。您是否尝试过运行调试器并检查
    许可证。首先,在SQL执行后立即执行属性