2010-11-11 2 views
0

Я пытаюсь собрать пару ассоциаций моделей для небольшого проекта, над которым я работаю. Я новичок в Rails, так что все это немного сбивает с толку.Rails 3 Ассортимент моделей с has_many, принадлежит_to и: через

Мой прецедент довольно прямолинейный. У меня есть спортивная Лига, у которой есть многоРазделы. Каждый Подразделимеет большое количество. Каждый Teamимеет одинКапитан и имеет многоИгроки.

Теперь игроки и капитаны представлены пользователем класса. Единственное, что их отличает, это их роль. Я использую CanCan для управления Ролями.

Теперь вот мои модели и как я определил ассоциации:

class Division < ActiveRecord::Base 
    belongs_to :league 
    has_many :teams 
end 

class League < ActiveRecord::Base 
    has_many :divisions 
end 

class Team < ActiveRecord::Base 
    belongs_to :division 
    accepts_nested_attributes_for :division 

    has_one :captain, :class_name => "User" 
    accepts_nested_attributes_for :captain 

    has_many :rosters 
    has_many :players, :through => :rosters, :source => :user 
    accepts_nested_attributes_for :players 

    validates_presence_of :name 
    validates_uniqueness_of :name 
end 

class User < ActiveRecord::Base 
    has_many :authentications 
    has_many :rosters 
    has_many :teams, :through => :rosters 
    belongs_to :team 
end 

And here is my generated Schema file.

  1. ли я правильно определить свои модельные ассоциации?
  2. Как мне назначить игрока или капитана команде, когда я создаю или редактирую команду?

Любая помощь была бы принята с благодарностью.

ответ

0
  1. Определение кажется ОК для меня. Есть и другие способы сделать это (конечно), но это кажется ОК.

  2. Это зависит от вашего интерфейса. Капитан должен быть достаточно прост - сделайте collection_select и назначьте его атрибуту captain.

Игроки немного сложнее. Обычный подход (как и вы) использовать collection_select с html-массивом name (например, team[player_id][]), и в вашем случае я предполагаю, что у вас есть определенное количество игроков для каждой команды, поэтому вы просто показываете это много раз (если не вы может использовать javascript для клонирования его для пользователя).

+0

Мне было бы интересно узнать о различных способах определения этих моделей и ассоциаций. Потому что, честно говоря, все это принадлежит _to и has_many вещи действительно меня смущает. – Ramin

+0

Вы можете, например, не определять капитана как has_one, а скорее быть атрибутом модели реестров. Но использование has_one в этой ситуации кажется хорошим. –

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