Get rails connection from foreign key?

What I want: for a given foreign key name and model class, I can get an association (to know which model it can be resolved to).

For example:

# model: product.rb
class Product < ActiveRecord::Base
  belongs_to :category
end

# resolution:
association = Product.get_association('category_id')

I need this feature get_association.

What I know now:

  • from Product.reflections I can get a list of reflections / associations
  • for one reflection, I can get a foreign key
  • I can build a map for this foreign key to get an association

However, I want to ask if there is a simple method that I can call directly?

Update: what I really need

I implement a view audit logusing audit . However, when I tried to display the audit log, I can get something like this:

supplier_id: changed from '1' to '0'

, , supplier_id, Supplier.

, :

belongs_to :reporter, class_name: 'User'

.

+4
1

reflect_on_association

Product.reflect_on_association(:category)

. .

tl; dr: .find


class Employee
  belongs_to :manager, foreign_key: :manager_id
end

class Manager
  has_many :subordinates, foreign_key: :manager_id, class_name: 'Employee'
end

- : manager_id: changed from '1' to '2', , , Employee, manager_id. , , manager_id, . , Manager, : Manager.find(1), Manager.find(2). .


:

class Employee
  belongs_to :manager, foreign_key: :department_id, class_name: 'Manager'
end

class Responsibility
  belongs_to :manager, foreign_key: :organizer_id, class_name: 'Manager'
  belongs_to :department, foreign_key: :department_id, class_name: 'Department'
end

class Manager
  has_many :subordinates, foreign_key: :organizer_id, class_name: 'Employee'
  has_many :obligations, foreign_key: :organizer_id, class_name: 'Responsibility'
end

class Department
  has_many :obligations, foreign_key: :department_id, class_name: 'Responsibility'
end

department_id: changed from '1' to '2', , .

, ( , ). , , .find .

+3

Source: https://habr.com/ru/post/1613768/


All Articles