根据子列值选择父数据库条目
Selecting Parent database entry based on child column value
我正在尝试 select 一个数据库条目,基于子 table 中列的值。
具体来说,我有一个table,其中包含公司管理人员的姓名和联系信息,型号:Officer
。官员 has_many :roles
(首席执行官、首席财务官、总裁等);这允许一名官员同时担任总裁兼首席执行官、首席运营官和首席技术官以及其他此类常见组合。
问题: 我正在努力 select 官员,基于公司的特定角色。 (假设我想获取公司CEO的名字。)
所以我设置了以下内容:
class Company < ActiveRecord::Base
has_many :officers
has_many :roles, through: :officers
accepts_nested_attributes_for :officers
end
和
class Officer < ActiveRecord::Base
has_many :roles
belongs_to :company
accepts_nested_attributes_for :roles
end
和
class Role < ActiveRecord::Base
belongs_to :officer
end
所以我试过了 company.officer.where(roles.role_string: "Chairman of the Board")
...不行
而且我试过了 company.roles.where(role_string: "Chairman of the Board").officer
...也不行
如有任何指导,我们将不胜感激!非常感谢。
这将导致 n:m 关系:
class Company < ActiveRecord::Base
has_many :officers
has_many :roles, through: :officers
end
class Role < ActiveRecord::Base
has_many :officers
has_many :companies, through: :officers
end
class Officer < ActiveRecord::Base
belongs_to :company
belongs_to :role
end
试试这个
1.
@roles = Role.includes(:officers).where(role_string: "Chairman of the Board")
循环并找到军官。
@roles.each do |role|
puts role.officer
end
2.
Company.includes(:roles).where('roles.role_string =?', "Chairman of the Board")
最终我用以下方法解决了它:(似乎最有效)
@officer_id=company.roles.where(role_string: "President").first.officer_id
@officer=company.officers.find(@officer_id)
first.officer_id
的原因是只有一个 officer/company 被允许担任给定的角色,即使一名官员有很多角色。可能有更优雅的方法来执行此操作,但以上方法目前有效。
我正在尝试 select 一个数据库条目,基于子 table 中列的值。
具体来说,我有一个table,其中包含公司管理人员的姓名和联系信息,型号:Officer
。官员 has_many :roles
(首席执行官、首席财务官、总裁等);这允许一名官员同时担任总裁兼首席执行官、首席运营官和首席技术官以及其他此类常见组合。
问题: 我正在努力 select 官员,基于公司的特定角色。 (假设我想获取公司CEO的名字。)
所以我设置了以下内容:
class Company < ActiveRecord::Base
has_many :officers
has_many :roles, through: :officers
accepts_nested_attributes_for :officers
end
和
class Officer < ActiveRecord::Base
has_many :roles
belongs_to :company
accepts_nested_attributes_for :roles
end
和
class Role < ActiveRecord::Base
belongs_to :officer
end
所以我试过了 company.officer.where(roles.role_string: "Chairman of the Board")
...不行
而且我试过了 company.roles.where(role_string: "Chairman of the Board").officer
...也不行
如有任何指导,我们将不胜感激!非常感谢。
这将导致 n:m 关系:
class Company < ActiveRecord::Base
has_many :officers
has_many :roles, through: :officers
end
class Role < ActiveRecord::Base
has_many :officers
has_many :companies, through: :officers
end
class Officer < ActiveRecord::Base
belongs_to :company
belongs_to :role
end
试试这个
1.
@roles = Role.includes(:officers).where(role_string: "Chairman of the Board")
循环并找到军官。
@roles.each do |role|
puts role.officer
end
2.
Company.includes(:roles).where('roles.role_string =?', "Chairman of the Board")
最终我用以下方法解决了它:(似乎最有效)
@officer_id=company.roles.where(role_string: "President").first.officer_id
@officer=company.officers.find(@officer_id)
first.officer_id
的原因是只有一个 officer/company 被允许担任给定的角色,即使一名官员有很多角色。可能有更优雅的方法来执行此操作,但以上方法目前有效。