Я новичок в Ruby on Rails, и я работаю над простым приложением для игры в шахматы, и у меня возникают некоторые проблемы с пониманием того, как использовать несколько ассоциаций и has_many, посредством ассоциации между моим пользователем (игроком) Модели игр и пьес. Модели я планирую создать являются:RoR4 Шахматная игра Ассоциации моделей
class User < ActiveRecord::Base
has_many :white_games, class: :Game, foreign_key: :'white_user_id'
has_many :black_games, class: :Game, foreign_key: :'black_user_id'
has_many :pieces, through: :games, source: :games
end
class Game < ActiveRecord::Base
belongs_to :white_user, class: :User, foreign_key: :'white_user_id'
belongs_to :black_user, class: :User, foreign_key: :'black_user_id'
has_many :pieces, foreign_key: :game_id
end
class Piece < ActiveRecord::Base
belongs_to :game
end
Это должно использовать пользовательские внешние ключи, и связать каждую ассоциацию в качестве одного belongs_to вызова от модели игры для каждого пользователя (игрока) для игры.
Затем я распространил это на модель пользователя. В игре каждый отдельный пользователь будет иметь несколько экземпляров класса Game, потому что пользователь может быть частью нескольких игр за раз.
Итак, white_games представляет все игры, в которых игрок является частью того, где он/она является белым игроком, -> карты, принадлежащие классу sort_to white_user в игре. И black_games делают то же самое для всех игр, в которых один и тот же пользователь участвует как black_user.
Вопросы:
1) Являются ли эти ассоциации настроены правильно?
2) Для модели куска в основном я хочу просто вернуть все части, которые пользователь имеет для определенной игры за раз.
Возможно ли это с использованием «внешнего ключа» с has_many штук, а затем в пользовательской модели с указанием «источника» с has_many: штук, через:: игры?
Так что, когда я позвоню @ user.pieces (game: game.id), он сделает именно это?
Благодаря @taryn, что имеет смысл для меня. Единственная проблема заключается в том, что я хотел бы вернуть только белые фигуры для игры, если пользователь является white_user для игры и наоборот для black_games.Любые идеи, как бы я настроил это, используя ассоциации? – Hales
Вы не можете, если не задаете цвет на куске. если вы попросите короля - как кусок знает, если это белый король или черный король? Если вы установите цвет на куске, вы также можете настроить условия для ассоциаций, которые только выберут этот цвет. Но я не уверен, что вы можете сделать это легко с помощью ассоциаций. Конечно, не так просто, как вы уже выше. Это займет некоторый сложный SQL ... который выполним. Вы хорошо разбираетесь в SQL? –
Да, у меня будет цветовое поле для модели Piece. Спасибо, что помогли много! – Hales