我正在尝试建模以通过铁路协会获得用户当前的公司角色。
用户可以在每家公司拥有多家公司和不同的地位。
我如何建模以便我可以执行User.first.current_company.status
我已经拥有用户和公司表格。
换句话说:
a has_many Bs
a has_many Cs
has_one B到C
(有许多As_one B到C)
如何定义此关联?
答案 0 :(得分:1)
给出以下模型模式:
# app/models/user.rb
class User < ActiveRecord::Base
has_many :companies
end
# app/models/company.rb
class Company < ActiveRecord::Base
belongs_to :user
has_one :status
end
# app/models/status.rb
class Status < ActiveRecord::Base
belongs_to :company
end
以下关系有效:
status = Status.first
company = Company.first
user = User.first
company.status = status # Assign status to company
user.companies << company # Add company to user
user.companies.last.status == Status.first # Status of user's last company is the original status
#=> true
答案 1 :(得分:0)
在 User.rb 模型中:
class User < ActiveRecord::Base
has_many :companies
end
在 Company.rb 模型中:
class Company < ActiveRecord::Base
belongs_to :user
end
我假设status是公司表中的一个属性。通过此设置,您应该能够执行所需的命令。
答案 2 :(得分:0)
我会使用Rolify Gem来完成此任务。
class User < ActiveRecord::Base
rolify
has_and_belongs_to_many :companies
def status(company)
roles = [:manager, :supervisor, :line-level]
status = []
roles.each { |role| status << role if self.has_role? role, company }
return status
end
end
class Company < ActiveRecord::Base
resourcify
has_and_belongs_to_many :users
end
这将允许你做...
@company = @user.companies.first
@user.status @company #=> [:manager] An array assuming they can have many roles.
使用此gem可以在单个对象上放置多个角色并限定为该对象。
答案 3 :(得分:0)
最终我创建了一个属于所有不同实体(A,B,C)的连接表。
a can hasmanman B通过该连接表 B可以通过该连接表has_many C. C可以通过该连接表来拥有A
该联接表的A,B和C has_many
要获得A的B或C,我创建了一个方法,用A从连接表中检索记录。 然后使用该记录返回B或C.