Well first of all are you 100% sure you need OnMarketDateDimension and SaleDateDimension classes? If you don't have any custom logic in them you should probably remove them and change associations a bit: class SalesFact < ActiveRecord::Base ... belongs_to :on_market_date_dimension, :class_name => 'DateDimension', :foreign_key => 'on_market_date_dimension_id' belongs_to :sale_date_dimension, :class_name => 'DateDimension', :foreign_key => 'sale_date_dimension_id' end
And I see no reason why you can't just do: SalesFact.first :include => [:on_market_date_dimension, :sale_date_dimension]. Or did I misinterpret what you need? On Mar 10, 3:59 am, Fearless Fool <[email protected]> wrote: > My question MIGHT be "ActiveRecord play nice with multiple views into a > table? > > I ask because my application has a single DateDimension table (heavily > ornamented date objects). Each SalesFact has TWO foreign keys into the > DateDimension table: one for the date a house went on the market, one > for when it was sold [*]. > > My first model+schema is shown below, but I'm stymied how to construct a > query that joins the SalesFact table with the Dimension tables. More > specifically, how do you craft a :select that includes on_market_date > and a sale_date, since they're both foreign keys into the same > date_dimension table? Extra points if you can do it all with > associations and not drop down into SQL. > > If that's not possible, I'm pretty sure I can create multiple views of > DateDimension to eliminate the ambiguity. But if there's a more RoR'ish > way to do this, I'm all ears. > > # ===== the models... > class SalesFact < ActiveRecord::Base > belongs_to :address_dimension > belongs_to :on_market_date_dimension > belongs_to :sale_date_dimension > end > class AddressDimension < ActiveRecord::Base > has_many :sales_facts > end > class DateDimension < ActiveRecord::Base > end > class OnMarketDateDimension < DateDimension > has_many :sales_facts > end > class SaleDateDimension < DateDimension > has_many :sales_facts > end > # ===== and the schema... > create_table "sales_facts", :id => false, :force => true do |t| > t.integer "address_dimension_id" > t.integer "on_market_date_dimension_id" > t.integer "sale_date_dimension_id" > t.float "asking_price" > t.float "sale_price" > end > create_table "address_dimensions", :force => true do |t| > t.string "house_number" > t.string "street_name" > ... lots and lots of other fields > t.float "latitude" > t.float "longitude" > t.string "postal_code" > end > create_table "date_dimension", :force => true do |t| > t.datetime "datetime" > t.boolean "is_weekend" > t.boolean "is_holiday" > ... lots and lots of other fields > t.string "day_name" > t.string "month_name" > t.integer "quarter" > end > # ===== > > [*] NOTE: Many people say "why don't you just put the two dates directly > into the SalesFact table?" Rather than tilt at that windmill, I'll > simply offer two pointers on the topic: > http://philip.greenspun.com/sql/data-warehousing.html(excellent > intro) > http://www.kimballgroup.com/html/booksDWT2.html(from the man > himself) > -- > Posted viahttp://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

