Giving an association a custom name
Sometimes, it may be desirable to reference an association with a name that differs from the one generated from the table name.
I have a model named
step can have many
step belongs to one other parent
class Step < ApplicationRecord belongs_to :step has_many :steps end
a = Step.create b = Step.create c = Step.create a.steps >> b a.steps >> c
I could get the parent step of
b like so:
b.step # => #<Step:0x00007fdf24b916e8
I don’t think that’s intuitive enough though. Since I’m asking for the parent step, it should be more like:
b.parent # => #<Step:0x00007fdf24b916e8
Setting up the custom name is simple. I can supply the name of my choosing. Then, all I need to do is specify the class name and foreign id in the options.
class Step < ApplicationRecord belongs_to :parent, class_name: 'Step', foreign_key: :step_id has_many :steps end