Ruby on Rails, модельные соединения - PullRequest
0 голосов
/ 30 июля 2010

У меня есть 2 модели:

class Video < ActiveRecord::Base
belongs_to :categories, :foreign_key => "category", :class_name => "Category"
end

class Category < ActiveRecord::Base
has_many :videos
end

Пока все нормально, в моем контроллере видео для страницы указателя у меня есть:

def index
@videos = Video.all(:joins => :categories)

etc, etc
end

Выше приведен следующий SQL-запрос: SELECT videos. * FROM videos INNER JOIN categories ON categories .id = videos .category

Это нормально до определенного момента, в основном мне нужно получить имя категории (поле в этой таблице), чтобы мне не нужно было делать еще один вызов в представлении, чтобы получить имя категории на основе идентификатора категории. , Есть идеи?

Спасибо, и да, я новичок в ruby, я пытался читать API, но там не мог найти большую помощь.

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Если вы считаете, что ассоциация в вашем классе Video установлена ​​неправильно.Это должно быть:

class Video < ActiveRecord::Base
  belongs_to :category
end

Можно сделать @videos = Video.all(:include => :category).Это приведет к извлечению видео и связанных записей категорий с помощью одного оператора SQL.

Кстати, ваша опция :class_name в ассоциации belongs_to является избыточной, поскольку ActiveRecord уже автоматически выведет имя класса из имени ассоциации,Эту опцию следует использовать только в том случае, если вы хотите, чтобы имя ассоциации отличалось от базового класса, например, авторы / Person.

0 голосов
/ 30 июля 2010
join_condition = " ,categories where INNER JOIN categories ON categories.id=videos.category"

@videos = Video.all(:joins => join_condition)

попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...