mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
21a386bb07
Before this commit, if `ActiveRecord::Base.belongs_to_required_by_default` is set to `true`, then creating a record through `has_and_belongs_to_many` fails with the cryptic error message `Left side must exist`. This is because `inverse_of` isn't working properly in this case, presumably since we're doing trickery with anonymous classes in the middle. Rather than following this rabbit hole to try and get `inverse_of` to work in a case that we know is not publicly supported, we can just turn off this validation to match the behavior of 4.2 and earlier.
40 lines
2.1 KiB
Ruby
40 lines
2.1 KiB
Ruby
class Project < ActiveRecord::Base
|
|
belongs_to :mentor
|
|
has_and_belongs_to_many :developers, -> { distinct.order 'developers.name desc, developers.id desc' }
|
|
has_and_belongs_to_many :readonly_developers, -> { readonly }, :class_name => "Developer"
|
|
has_and_belongs_to_many :non_unique_developers, -> { order 'developers.name desc, developers.id desc' }, :class_name => 'Developer'
|
|
has_and_belongs_to_many :limited_developers, -> { limit 1 }, :class_name => "Developer"
|
|
has_and_belongs_to_many :developers_named_david, -> { where("name = 'David'").distinct }, :class_name => "Developer"
|
|
has_and_belongs_to_many :developers_named_david_with_hash_conditions, -> { where(:name => 'David').distinct }, :class_name => "Developer"
|
|
has_and_belongs_to_many :salaried_developers, -> { where "salary > 0" }, :class_name => "Developer"
|
|
has_and_belongs_to_many :developers_with_callbacks, :class_name => "Developer", :before_add => Proc.new {|o, r| o.developers_log << "before_adding#{r.id || '<new>'}"},
|
|
:after_add => Proc.new {|o, r| o.developers_log << "after_adding#{r.id || '<new>'}"},
|
|
:before_remove => Proc.new {|o, r| o.developers_log << "before_removing#{r.id}"},
|
|
:after_remove => Proc.new {|o, r| o.developers_log << "after_removing#{r.id}"}
|
|
has_and_belongs_to_many :well_payed_salary_groups, -> { group("developers.salary").having("SUM(salary) > 10000").select("SUM(salary) as salary") }, :class_name => "Developer"
|
|
belongs_to :firm
|
|
has_one :lead_developer, through: :firm, inverse_of: :contracted_projects
|
|
|
|
begin
|
|
previous_value, ActiveRecord::Base.belongs_to_required_by_default =
|
|
ActiveRecord::Base.belongs_to_required_by_default, true
|
|
has_and_belongs_to_many :developers_required_by_default, class_name: "Developer"
|
|
ensure
|
|
ActiveRecord::Base.belongs_to_required_by_default = previous_value
|
|
end
|
|
|
|
attr_accessor :developers_log
|
|
after_initialize :set_developers_log
|
|
|
|
def set_developers_log
|
|
@developers_log = []
|
|
end
|
|
|
|
def self.all_as_method
|
|
all
|
|
end
|
|
scope :all_as_scope, -> { all }
|
|
end
|
|
|
|
class SpecialProject < Project
|
|
end
|