Module: Findable::Associations::ClassMethods
- Defined in:
- lib/findable/associations.rb
Instance Method Summary collapse
Instance Method Details
#belongs_to(*args) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/findable/associations.rb', line 28 def belongs_to(*args) name, = Utils.parse_args(args) model = Utils.model_for(name, safe: true, **) foreign_key = [:foreign_key].presence || name.to_s.foreign_key if [:polymorphic] define_method(name) do public_send("#{name}_type").constantize.find(public_send(foreign_key)) end else define_field(foreign_key) define_method(name) do model.find_by(model.primary_key => public_send(foreign_key)) end define_method("#{name}=") do |value| attributes[foreign_key.to_sym] = value ? value.public_send(model.primary_key) : nil end end end |
#has_many(*args) ⇒ Object
8 9 10 11 12 13 14 15 16 |
# File 'lib/findable/associations.rb', line 8 def has_many(*args) name, = Utils.parse_args(args) model = Utils.model_for(name, collection: true, **) foreign_key = [:foreign_key].presence || model_name.name.foreign_key define_method(name) do model.where(foreign_key => public_send(self.class.primary_key)) end end |
#has_one(*args) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/findable/associations.rb', line 18 def has_one(*args) name, = Utils.parse_args(args) model = Utils.model_for(name, **) foreign_key = [:foreign_key].presence || model_name.name.foreign_key define_method(name) do model.find_by(foreign_key => public_send(self.class.primary_key)) end end |