2013-09-20 4 views
0

У меня две модели: игрок и команда.Какое отношение эти модели должны иметь друг к другу?

  • Игрок имеет один команда

  • Команда имеет 5 полей на нем (в дополнение к его наименование и место нахождения), opponent_week_1, opponent_week_2 и т.д.

Я хотел бы быть в состоянии сказать что-то вроде Player.Team.opponent_week_1

Как связать модели друг с другом? Игрок has_one team?

Как установить противников команды? Я не хочу, чтобы команда имела несколько противников, потому что там будут только те 5, и я хочу иметь возможность сказать «соперник_week_1», «соперник_week_2» и т. Д.

Я использую Ruby 2 и Rails 4. Спасибо!

ответ

1

jackerman09,

Как и многие вещи в Rails, есть несколько способов идти об этом. @phgrey указал, как исправить игроков и команды.

Что касается opponent_week_1, 2 и т.д .:

Я думаю, что лучший способ, если вы на самом деле сделать имеют has_may :opponent_week ассоциацию от модели команды, как это:

class Team < ActiveRecord::Base 
... 
    has_many :fields 
... 
end 

Вы хотите затем необходимо ограничить ввод недельных оппонентов каждой команде только 5 через проверки и/или через формы. Поскольку пользователи будут вводить эти недели противников через формы, это будет простой способ сделать это сначала. У вас есть контроль над формами, поэтому просто ограничьте количество противников, которые они вкладывают для каждой команды через формы.

Как вы собираетесь их называть opponent_week_1, opponent_week_2 и т. Д .: Есть несколько способов. Я попытался бы поместить в вашу модель метод method_missing (google, чтобы узнать, как это сделать), затем проанализируйте имя метода, который вы назвали. Что-то вроде этого:

def method_missing(method_name) 
    if method_name.starts_with?("opponent_week_") 
    # get the number at the end, then call 
    opponent_weeks[ num_of_week - 1 ] 
    else 
    super 
    end 
end 

Все самое лучшее и дайте мне знать, если вам нужны разъяснения.

0

Посмотрите здесь - http://guides.rubyonrails.org/association_basics.html

1. Игроки < => Команда

class Player < ActiveRecord::Base 
... 
    belongs_to :team 
... 
end 

class Team < ActiveRecord::Base 
... 
    has_many :players 
... 
end 

Убедитесь, что миграция create_players имеет поле

t.references :team_id 

2. Oppenents Youre возглавляет wo самый простой способ. Лучше смотреть на HABTM (has_and_belongs_to_many) отношений между командами

Смежные вопросы