没有主键

时间:2017-03-24 21:03:06

标签: ruby-on-rails

我有一个date_dimensions表,其日期每天都有PK。我还有一个报告表,其中month_year是唯一的日期。我需要做一个将date_dimensions加入报表的连接查询。 在应用中唯一使用此关系的方法是运行此查询。

我如何建立这种关系?或者我可以写一个原始查询来加入这两个吗?

date_dimensions:

型号:

class DateDimension < ActiveRecord::Base
    has_many :reports
end

迁移:

class CreateDateDimensions < ActiveRecord::Migration
  def change
    create_table :date_dimensions do |t|
      t.date :date
      t.integer :month
      t.string :year_month_name
      t.integer :year
    end
  end
end

报告:

型号:

class Report < ActiveRecord::Base
    belongs_to :date_dimension
end

迁移:

class CreateReports < ActiveRecord::Migration
  def change
    create_table :reports do |t|
      t.string :customer_name
      t.string :month_year
      t.integer :page_views
    end
  end
end

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

DateDimension.joins('INNER JOIN reports ON date_dimensions.year_month_name = reports.month_year')

虽然您的姓名表明他们不会以同一顺序排列年份和月份,但可能无效。

不要忘记为这两个连接列添加索引。

更新1

抱歉,我错过了你在其他地方没有使用它。您可以将关系设置为:

`has_many :reports, primary_key: 'year_month_name', foreign_key: 'month_year'`

那么你应该能够使用标准的Rails语法来访问表