我試圖通過軌道中的關聯模型來獲取用戶的當前公司角色。Rails建模has_one被另一個foreign_key過濾
用戶可以擁有許多公司,並在每個公司中擁有不同的地位。
如何進行建模,所以我可以做這樣的事情User.first.current_company.status
我已經擁有了用戶和公司表。
換句話說:
甲的has_many燒烤
甲的has_many銫
通過C A HAS_ONE乙
(有許多作爲至C這HAS_ONE B)
如何定義這個關聯?
我試圖通過軌道中的關聯模型來獲取用戶的當前公司角色。Rails建模has_one被另一個foreign_key過濾
用戶可以擁有許多公司,並在每個公司中擁有不同的地位。
如何進行建模,所以我可以做這樣的事情User.first.current_company.status
我已經擁有了用戶和公司表。
換句話說:
甲的has_many燒烤
甲的has_many銫
通過C A HAS_ONE乙
(有許多作爲至C這HAS_ONE B)
如何定義這個關聯?
最終我創建了屬於所有不同實體(A,B,C)的連接表。
A也能經由HAS_MANY B中加入表 B可HAS_MANY C到該連接表 C能HAS_MANY一個通過連接表
是連接表的A,B和C的has_many
要獲得一個B或A的C,我創建了一個方法來檢索與A 的連接表中的記錄,然後使用該記錄返回B或C.
在你User.rb型號:
class User < ActiveRecord::Base
has_many :companies
end
在你Company.rb型號:
class Company < ActiveRecord::Base
belongs_to :user
end
我假設狀態是在你的公司表中的屬性。有了這個設置,你應該可以執行你想要的命令。
考慮下面的模型架構:
# 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
我會用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.
使用這個寶石可以讓你把一個對象上的多個角色和作用範圍包括該對象。
我需要一種可以與幾種不同的A-B-C方案一起工作的關聯模式,而不僅僅是狀態或角色。這看起來像它專門爲角色構建的... – bcm
什麼是將被建模的一些示例狀態? – rafroehlich2
每個用戶有不同的公司啓用或禁用。每家公司都有不同的用戶啓用或禁用。 – bcm
怎能狀態是對公司表,如果該公司有很多不同狀態的用戶! – bcm