首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >续集one_to_one关联

续集one_to_one关联
EN

Stack Overflow用户
提问于 2014-10-18 04:50:03
回答 2查看 1.7K关注 0票数 0

参考续集,我在职位和公司之间建立了一个one_to_one关联。

代码语言:javascript
运行
复制
class Position < Sequel::Model
  one_to_one :company
end
class Company < Sequel::Model
  many_to_one :position
end

当我试图让一家公司通过一个职位,我得到零,虽然我可以找到公司的直接后续查询。

代码语言:javascript
运行
复制
p = Position.first #=> #<Position @values={:id=>1}>
p.company #=> nil
Company.where(position_id: p.id).first #=> #<Company @values={:id=>1, position_id: 1}>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-18 08:01:06

你看上去对这种关系或模式感到困惑。除非你有一个非常具体的商业案例,一个公司有许多职位,这就形成了一对多的关系,许多职位可以属于一家公司,它可以形成多对一的关系。

以下是我的看法:

代码语言:javascript
运行
复制
require 'sqlite3'
require 'sequel'

DB = Sequel.connect('sqlite://companies')

DB.create_table :companies do
  primary_key :id
  String :name
end
DB[:companies].insert(name: 'Acme')

DB.create_table :positions do
  primary_key :id
  String :name
  foreign_key :company_id, :companies
end
DB[:positions].insert(name: 'CEO', company_id: DB[:companies].first[:id])
DB[:positions].insert(name: 'CTO', company_id: DB[:companies].first[:id])

class Company < Sequel::Model
  one_to_many :positions
end

class Position < Sequel::Model
  many_to_one :company
end

p Company.first.positions
# [#<Position @values={:id=>1, :name=>"CEO", :company_id=>1}>, #<Position @values={:id=>2, :name=>"CTO", :company_id=>1}>]

p Position.first.company
# #<Company @values={:id=>1, :name=>"Acme"}>
票数 2
EN

Stack Overflow用户

发布于 2014-10-19 02:12:25

我可以让你的社团发挥作用:

代码语言:javascript
运行
复制
require 'sequel'

DB = Sequel.connect('sqlite://test.db')

unless DB.table_exists? (:positions)
  DB.create_table :positions do
    primary_key :id
    string      :name
    foreign_key :company_id
  end
end

unless DB.table_exists?(:companies)
  DB.create_table :companies do
    primary_key :id
    string      :name
    foreign_key :position_id
  end
end

class Position < Sequel::Model
  one_to_one :company 
end

class Company < Sequel::Model
  many_to_one :position 
end

ford = Company.create(name: "Ford")
vw = Company.create(name: "VW")

accountant.company = ford
p accountant.company  #=> #<Company @values={:id=>53, :name=>"Ford", :position_id=>35}>
puts accountant.id    #=> 35

accountant.add_company(vw)  #=> undefined method `add_company' for #<Position...

我要补充的是,用于关联的续集文档非常糟糕。它们需要包含一个完整的示例--包括如何创建对象,使它们相互关联。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26436397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档