【问题标题】:Rails Joins Select Associated Columns not workingRails加入选择关联的列不起作用
【发布时间】:2020-02-19 13:05:38
【问题描述】:

我正在那里开发一个 Ruby on Rails 应用程序,

AnalyticsPage 有以下关系。与用户的多对多关系。

class AnalyticsPage < ApplicationRecord
  belongs_to :graph_page_layout
  has_many :analytics_pages_users
  has_many :users, through: :analytics_pages_users
  has_many :graph_sections
end

##### query #####
I need to write query where I need to fetch the columns from both of the tables.
analytics_pages = AnalyticsPage.select('users.first_name, users.last_name, analytics_pages.title').joins([:users])

上面的查询没有给出用户的名字和姓氏。另一点是,当我运行 SQL 查询时,它是在 mysql admin 中运行的。

【问题讨论】:

    标签: ruby-on-rails join activerecord


    【解决方案1】:

    试试pluck

    Pod.pluck('users.first_name, users.last_name').joins(:users)

    【讨论】:

      【解决方案2】:

      试试这个

      analytics_pages = AnalyticsPage.joins(:users).pluck('users.first_name,users.last_name')
      

      或者,如果字段first_namelast_name 是明确的,即在 AnalyticsPage 模型中不存在同名字段,那么以下也应该有效

      analytics_pages = AnalyticsPage.joins(:users).pluck([:first_name, :last_name])
      

      编辑 1:

      如果您还需要从 AnalyticsPages 模型中获取数据,那么可以这样做

      analytics_pages = AnalyticsPage.joins(:users).pluck('users.first_name,users.last_name, analytics_pages.field1,analytics_pages.field2')
      

      如果这些字段是明确的,以下应该可以工作

      AnalyticsPage.joins(:users).pluck(:user_field_1, :analytics_pages_field_1)
      

      关键是将 ModelA.joins(:model_b) 视为单个表。在这个表中,明确的字段是它们在原始表中的名称,并且不明确的字段以table_name. 前缀命名。

      编辑 2:

      即使select 也可以代替 pluck 工作,不同之处在于 select 返回一个 ActiveRecord 对象数组,而 pluck 返回一个字段数组。

      【讨论】:

      • 还需要从分析表中获取数据。
      • 相应地编辑了答案。
      • AnalyticsPage.joins(:users).pluck(:user_field_1, :analytics_pages_field_1)。它似乎工作。但是我真的很失望,为什么以前我工作了很多次,为什么选择不起作用。
      • 实际上,即使选择也可以正常工作。唯一的区别是 'select' 会给你一个 ActiveRecord 对象数组,而 pluck 会直接给你数组。
      猜你喜欢
      • 2016-06-16
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多