通过rails连接表检索属性

时间:2012-08-15 17:45:37

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有3个型号:产品,标签和products_tags:

标记模型:

class Tag < ActiveRecord::Base
        has_many :products, :through => :products_tags
        has_many :products_tags
end

产品型号:

class Product < ActiveRecord::Base
  has_many :tags, :through => :products_tags
  has_many :products_tags
  accepts_nested_attributes_for :tags
  accepts_nested_attributes_for :products_tags

加入:

class ProductsTag < ActiveRecord::Base
  belongs_to :product
  belongs_to :tag
end

我需要一个查询,它将检索与标签和产品模型相关的属性,作为AREL对象。

例如:

我的标签表有1个字段:Cat_name 我的产品表有:Title,URL,Image_url。

如何将所有这些属性检索为AREL记录。

2 个答案:

答案 0 :(得分:2)

您可以使用

以下加入关系

 @producttag=Tag.find(:all,:joins => :Product ,:select => "*")

 @producttag 

包含您需要的内容

让我知道你的意见......

答案 1 :(得分:1)

你没有说明你想从哪里开始搜索来检索这个,所以让我们来看看所有这些。

从标签开始

特定标记和相关产品作为ActiveRecord对象:

Tag.find(params[:id], include: :products)

特定标记和相关产品作为arel对象:

Tag.where(id: params[:id]).includes(:products)

所有标签和相关产品作为ActiveRecord对象数组:

Tag.includes(:products)

所有标签和相关产品作为arel对象:

Tag.includes(:products).arel

从产品开始

特定产品和相关标签作为ActiveRecord对象:

Product.find(params[:id], include: :tags)

特定产品和相关标签作为arel对象:

Product.where(id: params[:id]).includes(:tags)

所有产品和相关标签作为ActiveRecord对象数组:

Product.includes(:tags)

所有产品和相关标签作为arel对象:

Product.includes(:tags).arel

Rails有excellent guide,涵盖了多对多关联和联接。