2013-11-18 2 views
0

Хорошо, вот еще один запутанный вопрос.рельсы, получающие связанные объекты через ассоциации

У меня есть шоу. У этого есть много Эпизодов. В шоу может быть много каналов (т.е. категорий).

У меня эпизод. Я могу сделать эпизод.show.channels, чтобы получить каналы, к которым принадлежит шоу эпизода. Очень чистый.

Вот кикер: Я хотел бы получить случайное количество эпизодов, чьи шоу также принадлежат к тем же каналам, что и текущий эпизод.

ответ

0

Просто мои два цента, но не было бы легче иметь ваши модели организованы как это -

Channel (Category or Genre) 
    has_many :shows 

Show 
    belongs_to :channel 
    has_many :episodes 

Episode 
    belongs_to :show 

Подумайте о том, как вы будете выглядеть что-то в TV Guide - сначала Жанр (Sci -Fi, Action, Horror и т. Д.), Который имеет множество шоу, и из этого списка вы выбираете один, который затем имеет много эпизодов на выбор.

Это также сделает вашу логику много проще - Чтобы получить шоу в данном канале, использовать что-то вроде этого:

@channel = Channel.find_by_whatever 
@shows = @channel.shows 

и получить случайное х количество эпизодов в том же канале

@random_episodes = [] 
@shows.each { |s| @random_episodes << s.episodes.sample(x) } 

количество эпизодов вы выбирающих не является случайным (3 эпизода из каждого шоу, вероятно, не плохо стартовое место) - но эпизоды, которые выбираются выбраны случайным образом - так что если вы перезагрузите вы увидите di каждый раз.

+0

То, что вы описали, на самом деле является тем, как я его настроил - возможно, я объяснил это неправильно - но у меня есть habtm для шоу и каналов - потому что одно шоу может быть на нескольких каналах, а на одном шоу может быть много шоу. Я попробую то, что вы создали; было поздно не думать о том, чтобы бросить их в промежуточный массив, чтобы вырваться. – grimmwerks

+0

Также проснулся, думая, если у меня есть has_many: channels,: through =>: show, тогда я могу просто получить каналы каждого эпизода и быстро просмотреть шоу, не путешествуя по цепочке, но не должен иметь значения. – grimmwerks

+0

круто, дайте мне знать, если это сработает! – dax

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