Rails中间表关联

时间:2011-09-24 01:21:18

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

我有用户模型和标签模型。用户拥有技能和兴趣。

技能是标签,兴趣是标签。

我有一个用户,标签,用户技能,用户兴趣的表格。最后两个是中间表。我如何关联所有这些。以下是我的,但没有工作。提前谢谢。

#User model
class User < ActiveRecord::Base
    has_and_belongs_to_many :skills
    has_and_belongs_to_many :interests
end

#Tag model
class Tag < ActiveRecord::Base
    has_and_belongs_to_many :users
end

#Migrations
create_table :users_interests, :id => false do |t|
    t.references :user
    t.references :tag
end
create_table :users_skills, :id => false do |t|
    t.references :user
    t.references :tag
end

2 个答案:

答案 0 :(得分:2)

所以这里是遇到此问题的其他人的答案。中间表必须按顺序按字母顺序排列,即使这意味着可读性下降。然后使用join_table。如果这不是正确的答案(它有效,但可能不是很好的编码),请告诉我。

class User < ActiveRecord::Base
    has_and_belongs_to_many :skills, :class_name => "Tag", :join_table => "skills_users"
    has_and_belongs_to_many :interests, :class_name => "Tag", :join_table => "interests_users"
end

class Tag < ActiveRecord::Base
    has_and_belongs_to_many :users
end

create_table :skills_users, :id => false do |t|
    t.references :user
    t.references :tag
end

create_table :interests_users, :id => false do |t|
    t.references :user
    t.references :tag
end

答案 1 :(得分:0)

预计您的联接表格会有skill_idinterest_id FK而不是tag_id

我相信你正在寻找(没有方便的终端):

class User < ActiveRecord::Base
  has_and_belongs_to_many :skills, :association_foreign_key => :tag_id
  has_and_belongs_to_many :interests, :association_foreign_key => :tag_id
end