mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #40775 from eileencodes/fix-strict-loading-on-validations
Fix strict loading on validations
This commit is contained in:
commit
46337faa79
3 changed files with 29 additions and 2 deletions
|
@ -211,11 +211,11 @@ module ActiveRecord
|
|||
|
||||
private
|
||||
def find_target
|
||||
if owner.strict_loading?
|
||||
if owner.strict_loading? && owner.validation_context.nil?
|
||||
Base.strict_loading_violation!(owner: owner.class, association: klass)
|
||||
end
|
||||
|
||||
if reflection.strict_loading?
|
||||
if reflection.strict_loading? && owner.validation_context.nil?
|
||||
Base.strict_loading_violation!(owner: owner.class, association: reflection.name)
|
||||
end
|
||||
|
||||
|
|
|
@ -86,6 +86,27 @@ class StrictLoadingTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_strict_loading_is_ignored_in_validation_context
|
||||
with_strict_loading_by_default(Developer) do
|
||||
developer = Developer.first
|
||||
assert_predicate developer, :strict_loading?
|
||||
|
||||
assert_nothing_raised do
|
||||
AuditLogRequired.create! developer_id: developer.id, message: "i am a message"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_strict_loading_with_reflection_is_ignored_in_validation_context
|
||||
with_strict_loading_by_default(Developer) do
|
||||
developer = Developer.first
|
||||
assert_predicate developer, :strict_loading?
|
||||
|
||||
developer.required_audit_logs.build(message: "I am message")
|
||||
developer.save!
|
||||
end
|
||||
end
|
||||
|
||||
def test_preload_audit_logs_are_strict_loading_because_parent_is_strict_loading
|
||||
developer = Developer.first
|
||||
|
||||
|
|
|
@ -72,6 +72,7 @@ class Developer < ActiveRecord::Base
|
|||
class_name: "SpecialProject"
|
||||
|
||||
has_many :audit_logs
|
||||
has_many :required_audit_logs, class_name: "AuditLogRequired"
|
||||
has_many :strict_loading_audit_logs, -> { strict_loading }, class_name: "AuditLog"
|
||||
has_many :strict_loading_opt_audit_logs, strict_loading: true, class_name: "AuditLog"
|
||||
has_many :contracts
|
||||
|
@ -125,6 +126,11 @@ class AuditLog < ActiveRecord::Base
|
|||
belongs_to :unvalidated_developer, class_name: "Developer"
|
||||
end
|
||||
|
||||
class AuditLogRequired < ActiveRecord::Base
|
||||
self.table_name = "audit_logs"
|
||||
belongs_to :developer, required: true
|
||||
end
|
||||
|
||||
class DeveloperWithBeforeDestroyRaise < ActiveRecord::Base
|
||||
self.table_name = "developers"
|
||||
has_and_belongs_to_many :projects, join_table: "developers_projects", foreign_key: "developer_id"
|
||||
|
|
Loading…
Reference in a new issue