2012-05-15 4 views
0

Как вы бы применили ассоциацию на Rails для заданного n? Скажем, например, команда регби. В нем 15 игроков. Не могли бы вы реализовать его как has_many и зайти до сохранения, чтобы убедиться, что у него 15 игроков, или вы предпочтете реализовать его как 15 belongs_to? Обратите внимание, что порядок важен в этом случае.Лучший способ реализовать has_n

+0

Я думаю, что ваш вопрос напрямую связан с этим [вопрос] (http://stackoverflow.com/q/4836897/22371). – kafuchau

+0

Я не думаю, что это напрямую связано. В этом вопросе используется таблица соединений. Здесь нет необходимости. –

ответ

1

Edited чтобы отразить ваш запрос на заказ ...

Вам нужно добавить sort_key к столу игроков. Вы можете использовать целое число, но поплавок всегда является более гибким выбором. Затем используйте фразу :order => "sort_key".

class Team < ActiveRecord::Base 
    has_many :players, :order => "sort_key", :inverse_of => :team 
end 

class Player < ActiveRecord::Base 
    belongs_to :team, :inverse_of => :players 

    validate :validate_players_count, :on => :create 
    def validate_players_count 
    if team.players.size > 15 
     errors[:base] << "a team can only have 15 players" 
    end 
    end 
end 
+0

Тогда как бы вы поменяли игрока на первой позиции на одну в четвертом? – fotanus

+0

Отредактировал свой ответ, чтобы отразить запрос на заказ. –

+0

Спасибо, это то, что мне нужно. Теперь, чтобы изменить двух игроков с позиций, все, что мне нужно сделать, это обновить ключ сортировки. – fotanus

0

Я предпочитаю сделать это has_many и подтвердить количество игроков при добавлении нового игрока.

Я думаю, что это правильный способ сделать отношение «один ко многим».