参考续集,我在职位和公司之间建立了一个one_to_one
关联。
class Position < Sequel::Model
one_to_one :company
end
class Company < Sequel::Model
many_to_one :position
end
当我试图让一家公司通过一个职位,我得到零,虽然我可以找到公司的直接后续查询。
p = Position.first #=> #<Position @values={:id=>1}>
p.company #=> nil
Company.where(position_id: p.id).first #=> #<Company @values={:id=>1, position_id: 1}>
发布于 2014-10-18 08:01:06
你看上去对这种关系或模式感到困惑。除非你有一个非常具体的商业案例,一个公司有许多职位,这就形成了一对多的关系,许多职位可以属于一家公司,它可以形成多对一的关系。
以下是我的看法:
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"}>
发布于 2014-10-19 02:12:25
我可以让你的社团发挥作用:
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...
我要补充的是,用于关联的续集文档非常糟糕。它们需要包含一个完整的示例--包括如何创建对象,使它们相互关联。
https://stackoverflow.com/questions/26436397
复制相似问题