Support custom validation contexts in required
#1759
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR proposes to support custom validation contexts to determine whether a field is
required
or not.Current Behavior
Given the model:
The following currently renders both
name
andavatar
asrequired
:This does not correspond to the behavior of
@user.save
, which does not requireavatar
.Proposed Solution
This PR proposes a new option
context
on inputs. Its value is used to determine whether the input is required or not.The above example would only mark
name
asrequired
. The following example marks bothname
andavatar
asrequired
.The logic is as follows:
validates
in the modelcontext
option of inputvalidates presence: true
context: :with_picture
validates presence: true, on: :with_picture
validates presence: true, on: :with_picture
context: :with_picture
With the current feature set of
simple_form
, it is already possible to define thecontext
option for the whole form:This would make working with validation contexts much easier, in my opinion 🙂
Current Workaround
The
required
option on the input can be used already to control this behavior. However, determining whether there is a presence validator on the context requires extra code, and cannot be set on the whole form easily (cf. https://stackoverflow.com/a/14234720/1023963).