1

导轨应用程序:

  1. 用户拥有多个职位。
  2. 每个职位都有一个公司(公司名称和公司 ID),其架构如下:

    create_table "positions", :force => true do |t|
      t.integer  "user_id"
      ...
      t.string   "company"
      t.integer  "company_id"
    end
    
  3. 我希望用户能够“关注”尽可能多的个人公司(即一个用户可以关注许多不同的公司,一个公司可以被许多不同的用户关注)。这似乎需要用户和职位之间的 has_and_belongs_to_many 关系,但我希望用户能够关注职位行的公司属性,而不是职位本身。

我是否应该完全创建一个新的“关注”表,将公司从职位表中拉出以匹配 user_id?或者有没有办法可以建立一个has_many:通过关系并将user_id's映射到company_id's?

谢谢!

4

2 回答 2

1

我认为你可以拥有的

用户

integer User_Id
....

公司表:

string company
integer company_id
...

职位表:

integer user_id foreign_key -> User table
integer company_id foreign_key -> company table

表(如果用户可以关注任何公司关于他是否有职位):

integer user_id foreign_key -> User table
integer company_id foreign_key -> company table

或者,如果用户只能关注他拥有职位的公司,那么您可以在职位表中添加一个新列。这将是一个布尔标志,告诉用户是否“关注”由职位标识的公司。或者,在这种情况下,下表也可以将用户映射到位置。

于 2013-04-02T15:09:01.277 回答
0

我大致同意 MickJ,尽管创建了 Company 和 User 模型/表(显然每个都有一个 id 列)我会这样做:

create_table "companies" do |t|
   t.string "name"
   ... 
end

create_table "positions" do |t|
   t.references "user"
   t.references "company"
   ...
end

create_table "followings" do |t|
   t.references "user"
   t.references "company"
   ...
end

楷模:

class User
  has_many :positions
  has_many :followings
end 

class Company
  has_many :positions
  has_many :followings
end 

class Position
  belongs_to :user
  belongs_to :company
end 

class Following
  belongs_to :user
  belongs_to :company
end 

您可以通过以下方式从职位中引用公司:

position = Position.first
puts position.company.name

或由用户使用类似的东西

user = User.first
user.positions.each do |position| 
  puts position.company.name
end 

-- 编辑1:

要将公司名称从职位中提取到一个单独的表中,您最好编写一个小 rake 任务 - 例如:

Position.all.each do |position|
  company = Company.find_or_initialize_by_name(position.company_name)
  position.company_id = company.id
  position.save
end 

然后,您可能想要编写迁移以从职位表中删除公司名称列......只是为了保持整洁。

于 2013-04-02T15:56:31.053 回答