найти использование нескольких соединений в рельсах - PullRequest
0 голосов
/ 01 февраля 2012

Я пытаюсь построить игру футбольного менеджера, используя рельсы, и я застрял в ассоциации с рельсами.

team table
  ...

history table
  team_id
  saison_id

saison table
  league_id
  league table
  ...

Я хочу найти всю команду для одной лиги.

class History < ActiveRecord::Base
  belongs_to :saison
  belongs_to :team
end

class Saison < ActiveRecord::Base
  has_many :histories
  has_many :teams, :through => :histories
  belongs_to :league
end

class League < ActiveRecord::Base
  has_many :saisons 
end

class Team < ActiveRecord::Bases
  has_many :histories
  has_many :saisons, :through => :histories
end

Я хочу сделать что-то вроде (в методе show контроллера лиги):

@team = Team.find(:all, :include => [:saisons => :histories, :leagues => :saisons], 
          :conditions => ["leagues.id = ?", params[:id]])

но это не работает.

SQL-запрос:

SELECT Team.* 
FROM   Team, Saison, History, League  
WHERE  History.Team_ID = Team.ID AND 
       History.Saison_ID = Saison.ID AND 
       Saison.League_ID = League.ID

этот запрос возвращает всю команду за один сеанс ... но мне не удается заставить его работать в лиге

@division = Team.find(:all, :include => [:saisons => :histories],
                                :conditions =>["saisons.id =?",params[:id]])

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Если вы называете свои таблицы и модели на другом языке, то гораздо более вероятно, что вы не будете следовать соглашениям об именах Rails (но это может произойти и с английским!).

В любом случае, еслимножественное число определенного слова не заканчивается на S, вам нужно перейти к файлу inflections.rb, расположенному в your_app/config/initializers, и добавить туда множественное число определенных слов.Это просто в качестве примера:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'merchandise', 'merchandising'
end

Что касается вашего конкретного вопроса, я не уверен, что понимаю, но вы хотите ВСЕ команды сезона?Это просто, просто:

@saison_teams = saison.teams

Тогда вы хотите, чтобы все команды дивизии, но вы не сказали нам, что такое дивизия!

0 голосов
/ 02 февраля 2012

В контроллере лиги в методе show я пытаюсь что-то вроде

 @team = Equipe.find(:all, :include => [:saisons => :history],
                                :conditions =>["saisons.league_id =?",params[:id]])

Я бы включил лигу в оператор поиска, чтобы все ее атрибуты (например, имя) были на одной вкладке результатов.

Я знаю, что могу получить информацию о лиге в другом запросе, но это не лучший способ сделать это.

0 голосов
/ 01 февраля 2012

Я не уверен, как вы дошли до этого момента, но ваши соглашения об именах неверны для приложения Rails.

Давайте посмотрим на историю. Ваша модель должна называться «История».
Первая строка app / models / history.rb будет выглядеть так:
class History < ActiveRecord::Base

Таблица, сгенерированная в вашей базе данных, должна называться «историей».

Тогда, когда вы настраиваете свои ассоциации, вам нужно обратить внимание на плюрализм.

has_many всегда сопровождается множественным словом.
belongs_to всегда сопровождается единственным словом.

Ассоциации Сайсона должны выглядеть так:

class Saison < ActiveRecord::Base
  has_many :histories
  has_many :teams, :through => :histories
  belongs_to :league
end

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...