LoginSignup
0
1

More than 3 years have passed since last update.

select2を、[ rails6 + webpacker + jquery ] で使用してみる

Last updated at Posted at 2020-10-22

select2

  • yarn pkg で webpackerにインストールし使用する
  • 47都道府県を分類する selectbox を作成しました。とにかく見づらいし、選択しづらいという事で!導入にいたりました。

スクリーンショット 2020-10-22 19.01.21.png

  • ↑こんな感じで都道府県をスクロールすると、大変なのでキーワード入力で探せるようにします!

yarnで必要pkgをインストールする。

select2を操作するjqueryが必要
yarn add select2
yarn add jquery

view側

classやid名は、{ }で括る必要有
<%= search_form_for @map_key do |f| %>
  <%= f.select :address_cont, Map.ride_areas.keys, {}, {class: 'pref'} %>
  <%= f.button '検索' %>
<% end %>
layout/application.rb
<head>
  <%= javascript_pack_tag 'select2',      'data-turbolinks-track': 'reload' %>
</head>

model側

enumで47都道府県は格納
class Map < ApplicationRecord
enum ride_area:{
    北海道:0,青森県:1,岩手県:2,宮城県:3,秋田県:4,山形県:5,福島県:6,
    茨城県:7,栃木県:8,群馬県:9,埼玉県:10,千葉県:11,東京都:12,神奈川県:13,
    新潟県:14,富山県:15,石川県:16,福井県:17,山梨県:18,長野県:19,
    岐阜県:20,静岡県:21,愛知県:22,三重県:23,
    滋賀県:24,京都府:25,大阪府:26,兵庫県:27,奈良県:28,和歌山県:29,
    鳥取県:30,島根県:31,岡山県:32,広島県:33,山口県:34,
    徳島県:35,香川県:36,愛媛県:37,高知県:38,
    福岡県:39,佐賀県:40,長崎県:41,熊本県:42,大分県:43,宮崎県:44,鹿児島県:45,沖縄県:46
  }
end

webpacker側

javascript/packs/select2.jsを作成
global.$ = require('jquery')
import "../src/javascripts/form/select1.js";
javascript/src/search/select1.jsを作成
import 'select2';                       // globally assign select2 fn to $ element
import 'select2/dist/css/select2.css';  // optional if you have css loader

jQuery(function ($) {
  $('.pref').select2({
    dropdownAutoWidth: true,
    width: 'auto'
  })
})

webpacker設定

config/webpack/environment.rbに追記
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    Popper: 'popper.js'
  })
)
module.exports = environment

select2が適用されない!

  • jqueryが使用できているが、select2が適用されない。

なぜだろう?

もう一度、select2の公式を見てみる。

あった! たぶんこれが原因っぽい。↓

スクリーンショット 2020-10-23 11.06.34.png

select2はyarnでインストールして使用できていると思っていたけど、、

  1. yarn add select2 実行
  2. jsファイルでimport select2 してる呼び出しているはずなんだが、

結論 : 別で、jsとcssファイルが起動には必要てことかな??

原因: select2のmin.cssが適用されず、viewに反映されていなかった

fronts/src/stylesheets/application.scss
// yarnでインストールした、node_modules以下のselect2.min.cssを読み込むように指定する。
@import "select2/dist/css/select2.min.css";

docker-compose の再起動で無事yarn addしたselect2がjqueryによって適用された。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1