Ruby On Rails:如何保持has_one关系和另一个has_one作为单独的名称/

时间:2015-08-06 15:07:02

标签: ruby-on-rails activerecord has-one

我想要实现的是一种学徒关系,其简单的设置如下

class Apprentice
   attr_accessible :apprentice, :mentor, :other_details
   has_one :employee #contains the apprentice information
   has_one :employee #contains the mentor information
end
class Employee
   attr_accessible :name, :age, :gender
end

如何让员工成为学徒对象的学徒和导师?另外,我已经使Employee变形,因为我有其他需要使用它的对象。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

我认为这就是你所追求的:

class Employee < ActiveRecord::Base
  has_one :mentor, :class_name => 'Employee', :foreign_key => 'mentor_id'
  has_one :apprentice, :class_name => 'Employee', :foreign_key => 'apprentice_id'
end

答案 1 :(得分:0)

我认为最适合你所描述的问题的是自我指涉关系,“员工有导师”。您的模型可能如下所示:

# id - PK of the employee
# name - Name of the employee
# age - Age of the employee
# gender - Gender of the employee
# mentor_id - The employee's mentor
class Employee
  belongs_to :mentor, class_name: "Employee"
end

这样,您可以通过搜索mentornil的员工来找到所有学徒,并且您可以通过搜索mentor不在nil的员工来找到所有导师import UIKit import Parse import ParseUI class FirstViewController: PFLogInViewController, UITableViewDataSource, UITableViewDelegate, PFLogInViewControllerDelegate { @IBOutlet weak var tableView: UITableView! var textArray:NSMutableArray! = NSMutableArray() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.textArray.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell cell.textLabel?.text = self.textArray.objectAtIndex(indexPath.row) as? String return cell } }