[Rails] Rails with Stimulus 起手式
確認 Ruby 環境與 Rails 版本
# 建立並確定 Ruby 版本
$ rvm list known # 找出最新版本的 Ruby
$ rvm install 2.5 # 安裝特定版本的 Ruby
$ rvm --default use 2.5 # 使用特定版本的 Ruby 並設為預設值
# 確認 RubyGems 版本和套件版本
$ gem update --system # 若版本不夠新,則升級 RubyGems 的版本(不是 gems)
$ gem list | grep rails # 確認當前 Rails 版本
$ gem update rails # 若版本不夠新,則將 Rails 更新至最新版
建立 Rails + Stimulus 專案
建立專案
# 建立 Rails + Stimulus 專案
$ rails new <project_name> --webpack=stimulus --database=postgresql --skip-coffee --skip-test
$ cd <project_name>
$ rails db:migrate
測試使用 Stimulus
# 測試 Rails + Stimulus 能否使用
$ rails g controller pages index # http://localhost:3000/pages/index
將 javascript/packs/application.js
掛入 layout 中:
<!-- app/views/layouts/application.html.erb -->
<!DOCTYPE html>
<html>
<head>
...
<%= javascript_pack_tag 'application' %> <!-- 將 webpack entry 掛入 -->
...
</head>
<body>
<%= yield %>
</body>
</html>
把內建的範例複製到 app/views/pages/index
:
<!-- app/views/pages/index.html.erb -->
<div data-controller="hello">
<h1 data-target="hello.output"></h1>
</div>
若於頁面上看到 Hello, Stimulus!! 即表示已完成 Stimulus 安裝。
設定 CSS 檔
# Using webpacker for stylesheets
$ mkdir app/javascript/stylesheets
$ touch app/javascript/stylesheets/application.scss
$ touch app/javascript/stylesheets/_variables.scss
Import CSS file in app/javascript/pack/application.js
:
// layout file, like app/views/layouts/application.html.erb
import 'stylesheets/application';
Import CSS file by stylesheet_pack_tag
in app/views/layout/application.html.erb
:
<!-- app/views/layouts/application.html.erb -->
<!DOCTYPE html>
<html>
<head>
...
<%= javascript_pack_tag 'application' %>
<%= stylesheet_pack_tag 'application' %>
...
</head>
</html>
現在你可以在開始撰寫 CSS 了:
// app/javascript/stylesheets/application.scss
@import 'variables';
// app/javascript/stylesheets/_variables.scss
$colors: (
major: #00d252,
minor: #2f3b59,
);
安裝 Bootstrap
# https://getbootstrap.com/docs/4.1/getting-started/webpack/
$ yarn add jquery popper.js bootstrap
app/javascript/stylesheets/application.scss
// app/javascript/stylesheets/application.scss
@import '~bootstrap/scss/bootstrap';
...