我有一个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
答案 0 :(得分:2)
您可以执行以下操作:
DateDimension.joins('INNER JOIN reports ON date_dimensions.year_month_name = reports.month_year')
虽然您的姓名表明他们不会以同一顺序排列年份和月份,但可能无效。
不要忘记为这两个连接列添加索引。
抱歉,我错过了你在其他地方没有使用它。您可以将关系设置为:
`has_many :reports, primary_key: 'year_month_name', foreign_key: 'month_year'`
那么你应该能够使用标准的Rails语法来访问表