【问题标题】:How to get columns of belongs_to table?如何获取belongs_to 表的列?
【发布时间】:2016-12-28 13:45:20
【问题描述】:

学院.rb

has_many :tenant_colleges

tenant_college.rb

belongs_to :college

我想获取大学的属性名称以及所有的tenant_college 属性

我愿意

TenantCollege.select("tenant_colleges.*, colleges.name").joins(:college)

但它没有给出大学名称

【问题讨论】:

    标签: ruby-on-rails ruby join activerecord


    【解决方案1】:

    我很好奇你为什么不使用原始 SQL 来做这样的事情,但是下面的代码应该可以工作:

    TenantCollege.joins(:college).pluck("tenant_colleges.*", "colleges.name")

    【讨论】:

      【解决方案2】:

      试试eager loading associations,像这样

         tenant_colleges = TenantCollege.includes(:colleges)
          tenant_colleges.each do |tc|
            puts tc.college.name
          end 
      

      编辑
      就像@lcguida 建议最好使用两个单独的查询。如果您想在单个查询中得到它,请像往常一样使用 .select 方法

      TenantCollege.joins(:colleges).select("tenant_colleges.*, colleges.name")
      


      TenantCollege.joins("LEFT JOIN colleges ON tenant_colleges.id = colleges.tenant_id")
        .select('tenant_colleges.*', 'colleges.name')
      

      【讨论】:

        【解决方案3】:
        • 我想获取大学的属性名称以及所有的tenant_college 属性

        当我浏览belongs-to-association-referencehas-many-association-reference 时,没有可用的内置方法。但只需一点 hack 就很容易了。

        class College < ActiveRecord::Base
            def get_college_with_tenant_colleges
              _ary = {}
              _ary[:user] = self
              _ary[:tenant_colleges] =  self.tenant_colleges
              _ary
            end
          end
        

        但是要确保这个方法的return typeHash而不是ActiveRecord。所以为了得到ActiveRecord的所有方法,你需要iterate。 希望对您有所帮助!

        【讨论】:

          【解决方案4】:

          您可以通过为 sql 列设置特定名称来实现此目的:

          results = TenantCollege.select("tenant_colleges.*, colleges.name AS college_name").joins(:college)
          results[0].college_name
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多