2012-05-31 2 views
0

Следующий вопрос может указывать на отсутствие надлежащего понимания того, как все работает в Ruby, Rails или даже в общих концепциях ООП, и, поверьте, я подумал и много раз искал, прежде чем спрашивать, но я даже не мог сформировать правильный запрос поиска, чтобы найти правильный ответ, так что в любом случае вот что я хотел бы достичь ...Ссылка на родительские ссылки Rails в модели

song = Artist.first.albums.first.songs.first 

это -в моего understanding- будет называть модель песни и передать Исполнитель модель и модель альбома для модели Song, чтобы сформировать SQL-запрос для извлечения данных из базы данных, поскольку я использую ActiveRecord.

Реальный вопрос; есть ли способ узнать, какой Исполнитель и Альбом назвали модель песни? это полезно особенно во многих отношениях, где я не хочу передавать дополнительную ссылку для альбома/исполнителя.

Итак, если у меня есть функция в моей модели по какой-либо причине, она сможет определить, кто создал этот экземпляр этой песни?

ответ

0

Это слишком много цепочки, и это слишком сложно.

Однако, вы могли бы сделать song.artist или song.album получить Исполнитель песни и альбом, предполагая, что у вас есть belongs_to :album и belongs_to :artist отношения, объявленным в вашей модели песни.

Однако, вы можете просто сделать:

artist = Artist.first 
album = artist.albums.first 
songs = album.songs 

Таким образом, у вас есть художник, его/ее альбом вы хотите (в этом случае первый один) и его песни все на различных переменных, и вы можете обращаться их отдельно.

+0

Благодарим вас за ответ, я хорошо знаю, насколько уродливым является цепочка, я использовал его в качестве примера, чтобы избежать того, что было сделано, что должно было передать две или три переменные для представления, так как многие причины, так или иначе, как я смотрел, я нашел замечательный модуль в stdlib Ruby, я не уверен, хотя из-за побочных эффектов, поэтому я буду делать больше чтения на нем, это называется ObjectSpace, и я думаю, что легко добиться того, что Я хотел использовать ObjectSpace.each_object (Artist). edit: Я вызову ObjectSpace в методе класса, очевидно, а не в представлении. –

+0

Я редактировал свой первый пост. Разве он не отвечает на ваш вопрос сейчас? – Agis

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