hyperstack-org / hyperstack-org/hyperstack

ActiveModel validators on the client

未关闭
#297 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
JavaScript
星标
538
派生
41
PR 合并指标
30 天内没有已合并 PR

描述

ActiveModel provides a standard way to validate attributes, and it would be conveniently to use it on the client. Instead of validating a full record we can validate single attributes using validators directly:

```
def validate_attribute attr
value = send attr
self.class.validators_on(attr).each do |validator|
validator.validate_each(self, attr, value)
end
errors[attr].empty? ? nil : errors[attr]
end
```

And then validate user input in forms via existing model validators, something like that:
```
before_mount do
@user = User.new
end

render do
# Material UI
TextField(id: 'name', label: 'Name', required: true,
error: !@user.validate_attribute(:name).nil?,
helperText: @user.validate_attribute(:name)&.join("; ") || 'enter your name'
).
on(:change) do |evt|
@user.name = evt.target.value
end
end
```

Currently the model validators work only on the server, and aren't visible on the client, i.e. validators_on(attr) returns nil on the client. Is there some simple way to get it on the client too?

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。