omer khan
omer khan

Reputation: 99

Multiple Associations With the Same Table rails

i have two class User and Bug there are two foreign keys in bug which are referencing to user_id ..the problem is that how i store user_id in foreign key column while creating the record.like for example if user enter bug then his id store in buger_id colunm.

class Bug

belongs_to :buger, class_name: "User", foreign_key: "buger_id"
belongs_to :developer , class_name: "User", foreign_key: "developer_id"

class user

has_many :created_bugs, class_name:"bugs"
has_many :developed_bugs, class_name:"bugs"

Upvotes: 5

Views: 5517

Answers (3)

Toby 1 Kenobi
Toby 1 Kenobi

Reputation: 5037

In Rails 5.1 or greater you can do it like this:

Migration

class CreateBug < ActiveRecord::Migration
   def change
    ccreate_table(:bugs) do |t|
        t.references :bugger, foreign_key: { to_table: 'users' }
        t.references :developer, foreign_key: { to_table: 'users' }
    end
  end
end

This will create the fields bugger_id, and developer_id and make the database level references to the users table

Models

class Bug < ActiveRecord::Base
  belongs_to :bugger, class_name: "User"
  belongs_to :developer, class_name: "User"
end

class User < ActiveRecord::Base
  has_many :created_bugs, class_name: "Bug", foreign_key: "bugger_id"
  has_many :developed_bugs, class_name: "Bug", foreign_key: "developer_id"
end

FactoryBot

If you use FactoryBot then your factory might look something like this:

FactoryBot.define do
  factory :bug do
    association :bugger, factory: :user
    association :developer, factory: :user
  end
end

Upvotes: 0

Tilo
Tilo

Reputation: 33732

You need to add the foreign_key to the has_many declaration!

  class User < ActiveRecord::Base
    has_many :created_bugs, class_name: 'Bug'   , foreign_key: :buger_id
    has_many :developed_bugs, class_name: 'Bug' , foreign_key: :developer_id
  end

  class Bug < ActiveRecord::Base
    belongs_to :buger, class_name: 'User'
    belongs_to :developer , class_name: 'User'
  end

See also: http://guides.rubyonrails.org/association_basics.html

Upvotes: 6

SteveTurczyn
SteveTurczyn

Reputation: 36860

You can specify class and foreign key on the has_many line as well.

has_many :created_bugs, class_name:"Bug", foreign_key: 'buger_id'
has_many :developed_bugs, class_name:"Bug", foreign_key: 'developer_id'

Upvotes: 0

Related Questions