开发者

Rails intermediate table assosciations

I have a User model and a Tag model. The User has Skills and Interests.

开发者_JS百科

A Skill is a Tag, and an Interest is a Tag.

I have a table for Users, Tags, UsersSkills, UsersInterests. The last two being the intermediate table. How do I associate all this. The following is what I have but is not working. Thanks ahead of time.

#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


SO here is the answer for anyone else experiencing this problem. The intermediate table had to have its name be alphabetically in order, even if that means readability goes down the tube. A join_table was then used. If this is not the right answer (it works but might not be good coding), please let me know.

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


It's expecting your join tables to have skill_id and interest_id FK's rather than tag_id.

I believe you're looking for (don't have a terminal handy):

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜