Вопрос по ссылкам на модели Rails - PullRequest
1 голос
/ 26 февраля 2011
class CreateMatches < ActiveRecord::Migration
  def self.up
    create_table :matches do |t|
      t.integer :result_home
      t.integer :result_away
      t.references :clan, :as => :clan_home
      t.references :clan, :as => :clan_away

      t.references :league

      t.timestamps
    end
  end

  def self.down
    drop_table :matches
  end
end

Я думаю, что код очищает все, мне нужно ссылаться на result_home для одного клана и result_away на другой.Каков наилучший способ сделать это?Я мог бы создать has_and_belongs_to_many, но я думаю, что это не очень хороший способ в этом случае.

1 Ответ

1 голос
/ 26 февраля 2011

Это выглядит как объединение объединения, назовите это Match, и

class Clan < ActiveRecord::Base
  has_many :home_matches, :class_name => 'Match', :foreign_key => :clan_home
  has_many :away_matches, :class_name => 'Match', :foreign_key => :clan_away
  has_many :opponents_at_home, :through => :home_matches, :source => :clan
  has_many :opponents_away, :through => :away_matches, :source => :clan
end

class Match < ActiveRecord::Base
  belongs_to :clan_home, :class_name => 'Clan'
  belongs_to :clan_away, :class_name => 'Clan'
end

Это немного за пределами моего личного опыта , и я не на 100% уверен в интерпретациидокументации для :source (отметьте http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html). Однако, я думаю, что это будет в правильном направлении. YMMV .

Комментарии и улучшения приветствуются!

...