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
requiredor not.Current Behavior
Given the model:
The following currently renders both
nameandavatarasrequired:This does not correspond to the behavior of
@user.save, which does not requireavatar.Proposed Solution
This PR proposes a new option
contexton inputs. Its value is used to determine whether the input is required or not.The above example would only mark
nameasrequired. The following example marks bothnameandavatarasrequired.The logic is as follows:
validatesin the modelcontextoption of inputvalidates presence: truecontext: :with_picturevalidates presence: true, on: :with_picturevalidates presence: true, on: :with_picturecontext: :with_pictureWith the current feature set of
simple_form, it is already possible to define thecontextoption for the whole form:This would make working with validation contexts much easier, in my opinion 🙂
Current Workaround
The
requiredoption 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).