这种类型的关联可以通过has_many构建:通过吗?

时间:2015-07-01 11:20:49

标签: ruby-on-rails-4 activerecord has-many-through

我希望a.items从所有Items返回所有Projects。 但它什么也没有回报...... 我可以通过a.projects.first.itemsa.projects.second.items查询等方式获取相关内容,但我不喜欢这种列出单个项目的方法...

是否可以使用has_many :(或其他关键字)创建此类关联以返回所有项目中的所有项目?

a = Account.first
a.items <---- return nothing via has_many :through

这里为a.items

生成了SQL
  

SELECT&#34; items&#34;。* FROM&#34; items&#34; INNER JOIN&#34;项目&#34; ON&#34; items&#34;。&#34; id&#34; =   #&34;项目&#34;&#34; ITEM_ID&#34;在哪里&#34;项目&#34;。&#34; account_id&#34; =?   [[&#34; account_id&#34;,1]]

从SQL语句判断我认为问题出现是因为Project模型具有item_id字段。但这是因为ProjectItem的特殊类型。

account.rb

# == Schema Information
#
# Table name: accounts
#
#  id         :integer          not null, primary key
#

class Account < ActiveRecord::Base
    has_many :projects
    has_many :items, :through => :projects
end

project.rb

# == Schema Information
#
# Table name: projects
#
#  id         :integer          not null, primary key
#  account_id :integer
#  item_id    :integer
#

class Project < ActiveRecord::Base
    belongs_to :account
    belongs_to :item
    has_many :items    
end

item.rb的

# == Schema Information
#
# Table name: items
#
#  id               :integer          not null, primary key
#  name             :string
#  project_id       :integer
#

class Item < ActiveRecord::Base
    belongs_to :project    
end

1 个答案:

答案 0 :(得分:0)

感谢Brian Tompsett。他的建议是正确的。 我删除了循环belongs_to依赖项&lt; - &gt;项目代码开始按我的意愿工作。

这是工作代码:

class Project < ActiveRecord::Base
    belongs_to :account
    # belongs_to :item <---- Comment this line
    has_many :items    
end