如何在 RoR 中正确安装 select2(或 Chosen - 或者任何 JS?)?

How to properly install select2 (or Chosen - or maybe ANY JS?) in RoR?

Rails 初学者:我玩过 Chosen,看到一些帖子说 Select2 是更好的选择。但是,无论我尝试使用哪一个,我总是 运行 陷入同样的​​错误。

我在 Gemfile 和 运行 捆绑安装中有其中之一,然后出现 gem(我可以 运行 捆绑信息)。

然后我尝试将 JS 包含到 app/javascript/packs/application.js 中,如下所示:

require ("select2")

require ("chosen-jquery")

无论我做什么 - 我的 JS 控制台显示

Cannot find module 'select2'

(或选择-jquery).

我确信这是一个超级愚蠢的疏忽。我疯狂地用谷歌搜索并在这里搜索但找不到任何东西(这可能更意味着这是一个愚蠢的 oversicht!:)

非常欢迎任何提示。我可能不明白所有这些 webpacker / JS 的东西是如何工作的。 请注意,我能够通过 YARN 轻松自动完成(和 jquery),然后我实际上可以通过以下方式在 application.js(以及 application.scss 中的样式表)中需要轻松自动完成:

require("easy-autocomplete")

我不太明白为什么这个有效而其他的无效?

这是我的完整 app/javascript/packs/application.js(包括自动完成):

import Rails from "@rails/ujs"
import Turbolinks from "turbolinks"
import * as ActiveStorage from "@rails/activestorage"
import "channels"

Rails.start()
Turbolinks.start()
ActiveStorage.start()

require("jquery")
require("easy-autocomplete")

require("select2/dist/css/select2")


document.addEventListener("turbolinks:load", function() {
    var $input = $("[data-behaviour='autocomplete']")

    var options = {
        getValue: "name",
        url: function(phrase) {
            return "/search.json?q=" + phrase;
        },
        categories: [
            {
                listLocation: "movies",
                header: "<strong>Movies</strong>",
            },
            {
                listLocation: "actors",
                header: "<strong>Actors</strong>",
            },
            {
                listLocation: "actoraliases",
                header: "<strong>Actor Aliases</strong>",
            }
        ],
        list: {
            onChooseEvent: function() {
                var url = $input.getSelectedItemData().url
                $input.val("")
                Turbolinks.visit(url)
            }
        }
    }

    $input.easyAutocomplete(options)
})

document.addEventListener("turbolinks:load", function() {
    $('.selector').select2();
})

谢谢!

如果您正在使用 select-2-rails,这仅适用于 Rails 资产管道。

尝试通过 yarn 安装 select2(相对于 ruby gem):

yarn install select2

app/javascript/packs/application.js中:

require("select2/dist/css/select2")

$(".content-search").select2();

// Side Note: when I moved this to a Stimulus Controller `import Select2 from "select2"` was needed.

app/views/foos/_form.html.erb中:

<%= form.label :foo_id %>
<%= form.collection_select(:foo_id, Foo.all, :id, :name, { include_blank: true }, class: "content-search") %>