hyperstack-org / hyperstack-org/hyperstack

ActiveModel validators on the client

オープン
#297 コメント 1 件 リアクション 0 件 担当者 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 を短くまとめたダイジェスト。