根据子列值选择父数据库条目

时间:2015-01-25 10:34:59

标签: ruby-on-rails database ruby-on-rails-4 crud

我正在尝试根据子表中列的值选择数据库条目。

具体来说,我有一个表格,其中包含公司管理人员的姓名和联系信息,型号:Officer。一名官员has_many :roles(首席执行官,首席财务官,总裁等);这使得高级职员既可以担任总裁兼首席执行官,首席运营官和首席技术官以及其他此类常见组合。

问题:我很难根据公司的特定角色选择高级职员。 (假设我想得到公司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") ... nope

我已经尝试过了company.roles.where(role_string: "Chairman of the Board").officer ...也是没有了

任何指导将不胜感激!非常感谢提前。

3 个答案:

答案 0 :(得分:1)

试试这个

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")

答案 1 :(得分:0)

这将导致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

答案 2 :(得分:0)

最终我用以下方法解决了这个问题:(看起来效率最高)

@officer_id=company.roles.where(role_string: "President").first.officer_id
@officer=company.officers.find(@officer_id)

first.officer_id的原因是,即使一名军官有很多角色,也只允许一名军官/公司担任某个角色。可能有一种更优雅的方式来做到这一点,但现在上述工作。