Ruby on Rails,模型连接

时间:2010-07-30 15:04:43

标签: ruby-on-rails activerecord join

我有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

哪个到目前为止都很好,基本上我需要获取类别名称(该表中的一个字段),这样我就不必在视图中再做一次调用,根据类别id获取类别名称。有什么想法吗?

谢谢,是的,我是ruby的新手,我尝试阅读API,但在那里找不到多少帮助。

2 个答案:

答案 0 :(得分:1)

如果认为Video类中的关联设置不正确。它应该是:

class Video < ActiveRecord::Base
  belongs_to :category
end

你可以@videos = Video.all(:include => :category)。这将使用单个SQL语句检索视频和关联的类别记录。

顺便提一下,:class_name关联上的belongs_to选项是多余的,因为ActiveRecord已经从关联名称中自动推断出了类名。如果要使关联名称与基础类不同,则应仅使用此选项,例如作者/人。

答案 1 :(得分:0)

join_condition = " ,categories where INNER JOIN categories ON categories.id=videos.category"

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

试试这个