Skip to content

Validations: Default context based on persistence#469

Open
seanpdoyle wants to merge 2 commits into
rails:mainfrom
seanpdoyle:validates-default-context
Open

Validations: Default context based on persistence#469
seanpdoyle wants to merge 2 commits into
rails:mainfrom
seanpdoyle:validates-default-context

Conversation

@seanpdoyle
Copy link
Copy Markdown
Contributor

@seanpdoyle seanpdoyle commented Dec 18, 2025

Depends on #468

This commit proposed that Active Resource follow the same pattern as
Active Record Validations, namely that an instance's default
validation context will be :create when the record is not yet
persisted and :update when the record is persisted.

@seanpdoyle seanpdoyle force-pushed the validates-default-context branch from 92ac827 to a4ef2aa Compare January 6, 2026 01:55
@seanpdoyle seanpdoyle force-pushed the validates-default-context branch from a4ef2aa to 0b682b2 Compare March 4, 2026 16:25
seanpdoyle added 2 commits May 7, 2026 08:33
Forward the `:context` option from `Base#save` and `Base#save!` to the
underlying `Validations#valid?` call.

The argument delegation changes to this method signature are necessary
for the sake of the [ActiveResource::Validations#save_with_validation][]
method. The `ActiveResource::Validations` module aliases the previously
defined `#save` method to a `#save_without_validation` method, and then
defines its own `#save_with_validation` method which accepts arguments
(previously the `:validate` option, now the `:validate` *and* `:context`
option).

This commit also includes test coverage for directly calling
`Validations#valid?` with a `context` value, since that behavior wasn't
covered by tests elsewhere in the suite.

[ActiveResource::Validations#save_with_validation]: https://github.com/rails/activeresource/blob/v6.2.0/lib/active_resource/validations.rb#L111
This commit proposed that Active Resource follow the same pattern as
[Active Record Validations][], namely that an instance's default
validation context will be `:create` when the record **is not yet**
persisted and `:update` when the record **is** persisted.

[Active Record Validations]: https://api.rubyonrails.org/v8.1/classes/ActiveRecord/Validations.html#method-i-valid-3F
@seanpdoyle seanpdoyle force-pushed the validates-default-context branch from 0b682b2 to dbfae0c Compare May 7, 2026 12:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant