通过协会获得所有者

时间:2015-02-14 12:49:21

标签: ruby-on-rails activerecord

我有这个班级公司:

class Company < ActiveRecord::Base
  belongs_to :owner, class_name: 'User'
  has_many :users, :dependent => :destroy
  after_create :set_owner

  def set_owner
    owner.update_attributes(company_id: id, role_id: 0)
  end

和这个班级用户:

class User < ActiveRecord::Base
  has_one :company, foreign_key: :owner_id
  belongs_to :team, class_name: 'Company', foreign_key: :company_id

公司只能拥有一个所有者,但可以拥有许多其他用户。

这一切都很好,对于新注册我这样做:

def new
  @user = User.new
  @user.build_company
end

但是现在我想在新公司初始化期间获得所有者名称。

如果我在控制台中这样做:

u = User.new(:name => 'My Name', :email => 'test@mail.com')
c = u.build_company(:name => 'my company')
c.owner
 => nil
c.users.count
 => 0

我该怎么做?我希望让用户在初始化阶段建立公司(以便能够获得用户的名字)。

1 个答案:

答案 0 :(得分:0)

您可以通过添加inverse_of来解决此问题,这样构建的实例就会知道关系

class User < ActiveRecord::Base
  has_one :company, foreign_key: :owner_id, inverse_of: :owner
end