module LunaPark::Extensions::Dsl::ForeignKey

@example

class Transaction
  # ...
  include LunaPark::Extensions::Dsl::ForeignKey

  foreign_key :user_uid, :user, primary_key: :uid # `primary_key:` default is `:id`
                                                  # foreign_key points to primary_key

  # OR alias:
  fk :user_uid, :user, pk: :uid

  # ...
end

t = Transaction.new
t1.user # => nil
t1.user_uid # => nil

t1.user = User.new(uid: 42)
t1.user # => #<User uid=42>
t1.user_uid # => 42 (changed)

t1.user # => #<User uid=42>
t1.user = nil
t1.user_uid # => nil (removed)

t1.user # => #<User uid=42>
t1.user_uid = nil
t1.user # => nil (removed)

t1.user # => #<User uid=42>
t1.user = User.new(uid: 666)
t1.user_uid # => 666 (changed)

t1.user # => #<User uid=42>
t1.user_uid = 666
t1.user # => nil (removed cause uid missmatch)

Public Class Methods

extended(base) click to toggle source
# File lib/luna_park/extensions/dsl/foreign_key.rb, line 47
def self.extended(base)
  base.extend  ClassMethods
  base.include InstanceMethods
end