Rails建模has_one被另一个foreign_key过滤

时间:2014-01-30 23:33:47

标签: ruby-on-rails database ruby-on-rails-3 activerecord

我正在尝试建模以通过铁路协会获得用户当前的公司角色。

用户可以在每家公司拥有多家公司和不同的地位。

我如何建模以便我可以执行User.first.current_company.status

之类的操作

我已经拥有用户和公司表格。

换句话说:

a has_many Bs

a has_many Cs

has_one B到C

(有许多As_one B到C)

如何定义此关联?

4 个答案:

答案 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.