通过关联获取所有者
Get owner by association
我有这个 class 公司:
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 用户:
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
我该怎么做?我想在初始化阶段获取创建公司的用户(以便能够获取用户名)。
你可以通过添加 inverse_of
来解决这个问题,这样构建的实例就会知道关系
class User < ActiveRecord::Base
has_one :company, foreign_key: :owner_id, inverse_of: :owner
end
我有这个 class 公司:
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 用户:
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
我该怎么做?我想在初始化阶段获取创建公司的用户(以便能够获取用户名)。
你可以通过添加 inverse_of
来解决这个问题,这样构建的实例就会知道关系
class User < ActiveRecord::Base
has_one :company, foreign_key: :owner_id, inverse_of: :owner
end