jQuery-validation-pluginをyarnで導入している記事が見つからなかったので書いてみます。
インストール
名前の通りjQueryが必要なのでとにかく追加(既に導入済みの方はスキップ)
$ yarn add jquery
次に本命のpluginを追加
$ yarn add jquery-validation
この2つをimportします
それぞれファイルの下に記述を追加してください!
import "jquery";
import "jquery-validation";
const webpack = require('webpack')
environment.plugins.prepend(
'Provide',
new webpack.ProvidePlugin({
$: 'jquery/src/jquery',
jQuery: 'jquery/src/jquery'
})
)
これで導入完了です👍
Formとjsファイル作成
<%= form_with model: @sample, id: sampleForm do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<% end %>
$(function () {
$("#sampleForm").validate( {
rules: {
"sample[title]": {
required: true
}
}
});
});
jsファイルをimportします!
import "./sample_validation"
動作確認&エラー
やっと動作を確認してみます...が
$(...).validate is not a function
のエラーがコンソールに出てしまい、動作してくれません。
原因はimportしたjQueryとjquery-validation
の中で使われているjQueryが別のものとして認識されてしまっていることにあります。
解決策
上記の解決策として、expose-loader
を導入します。
expose-loader
を使うと、jQueryをグローバル変数にしてくれるので問題を解決できます!
$ yarn add expose-loader@1
import "jquery"; // 削除
import $ from "expose-loader?exposes[]=$&exposes[]=jQuery!jquery"; // 追加
import "jquery-validation";
import "./sample_validation";
これに伴い、environment.jsの以下の部分を削除します。(わざわざ追加してもらったのにすみません😅)
const webpack = require('webpack')
environment.plugins.prepend(
'Provide',
new webpack.ProvidePlugin({
$: 'jquery/src/jquery',
jQuery: 'jquery/src/jquery'
})
)
完了
お疲れ様でした!
Bootstrapも使うとより良い感じに実装できるので調べてみてください!
余談
ここまでの実装だと、一部の機能(ファイルのバリデーションなど)が使えないので、下の2つもimportをおすすめめします
import 'jquery-validation/dist/additional-methods' // 追加機能
import 'jquery-validation/dist/localization/messages_ja' //日本語化
参考記事