我从Harvest收集数据。这是我的两个模型和架构:
# schema
create_table "clients", :force => true do |t|
t.string "name"
t.integer "harvest_id"
end
create_table "projects", :force => true do |t|
t.string "name"
t.integer "client_id"
t.integer "harvest_id"
end
# Client.rb
has_many :projects, :foreign_key => 'client_id' # not needed, I know
# Project.rb
belongs_to :client, :foreign_key => 'harvest_id'
我正在尝试通过将Project.client_id与Client.harvest_id相匹配来让Projects找到他们的客户端。这是我得到的。
> Project.first.client_id
=> 187259
Project.first.client
=> nil
Client.find(187259).projects
=> []
这可能吗?谢谢!
答案 0 :(得分:0)
由于项目模型中的belongs_to
关系位于harvest_id
,因此您必须确保在项目对象中设置harvest_id
属性。
> Project.first.harvest_id
=> ??
如果未设置harvest_id
,则可能会出现问题。
答案 1 :(得分:0)
通过将Project。 client_id 与客户匹配来查找客户的项目。 harvest_id
这似乎没有意义,因为客户端和收获应该是不同的对象/记录,你无法匹配它们。
就像“找到有橙子种子的苹果”。
所以我们可能需要更多的背景。
您通过以下方式定义了您的关系:
在项目方面,您说“它通过client_id
”与客户相关,但在客户端上,您说“它与项目通过{{1 }} “
你有差异。
所以看起来你只是定义了不正确的映射。
不确定应该如何使用harvest_id,因此假设它只是关联:
harvest_id
答案 2 :(得分:0)
可能看起来不直观,但两种关系的foreign_key必须相同。假设您决定使用harvest_id作为外键。它应该像这样设置:
# Client.rb
has_many :projects, :foreign_key => 'harvest_id'
# Project.rb
belongs_to :client, :foreign_key => 'harvest_id'
由于客户端有很多项目,因此你也只在项目表中有了harvest_id字段。