8000 GitHub - aselab/crud
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

aselab/crud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crud

Railsã®DBã®CRUDæ“作を簡å˜ã«å®Ÿè£…ã™ã‚‹ãŸã‚ã®ãƒ©ã‚¤ãƒ–ラリ。 ä¸€è¦§ã®æ¤œç´¢ã€ã‚½ãƒ¼ãƒˆã€ãƒšãƒ¼ã‚¸ãƒãƒ¼ã‚·ãƒ§ãƒ³ã‚„å„アクションã®èªå¯æ©Ÿèƒ½ã‚‚å‚™ãˆã‚‹ã€‚

デモアプリ

事å‰ã«yarnを実行ã§ãる環境を構築ã—ã¦ãŠãã“ã¨ã€‚

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash
※nvmã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¯æœ€æ–°ã®æƒ…報をサイトã§ç¢ºèª
nvm install --lts

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt-get install --no-install-recommends yarn
※yarnã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¯æœ€æ–°ã®æƒ…報をサイトã§ç¢ºèª
git clone git@bitbucket.org:aselab/crud.git
cd crud
bundle install
cd spec/dummy
bin/yarn install
bin/rails db:migrate
bin/rails s

http://localhost:3000

インストール

crudã¯ä»Šã®ã¨ã“ã‚ vendor/gems/crud ã«ç½®ãã“ã¨ã‚’剿ã¨ã™ã‚‹ã€‚ Webpacker㨠Bootstrap 4 ãŒå‰æãªã®ã§åˆ¥é€”インストールã—ã¦ãŠã。

git submoduleã§é‹ç”¨ã™ã‚‹å ´åˆ

git submodule add git@bitbucket.org:aselab/crud.git vendor/gems/crud
git submodule update --init
# 特定ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使ã„ãŸã„å ´åˆã¯submoduleã«ç§»å‹•ã—ã¦checkoutã™ã‚‹

ファイルã ã‘追加ã™ã‚‹å ´åˆ

mkdir -p vendor/gems/crud
git archive --remote=git@bitbucket.org:aselab/crud.git [master or ãƒãƒ¼ã‚¸ãƒ§ãƒ³æŒ‡å®šãªã©] | tar -x -C vendor/gems/crud

以下をGemfileã«è¿½åŠ ã—ã¦bundle install

gem 'crud', path: 'vendor/gems/crud'
# API modeã®å ´åˆã¯ã“ã¡ã‚‰ã€ä»¥é™ã®è¨­å®šã¯ä¸è¦
gem 'crud_api', path: 'vendor/gems/crud'

yarnã§ãƒ‘ッケージ追加

bin/yarn add vendor/gems/crud/webpacker
bin/yarn add @fortawesome/fontawesome @fortawesome/fontawesome-free-solid
# 以下ã¯inputsã‚’ä½¿ã†æ™‚ã«å¿…è¦ãªã‚‚ã®ã ã‘
bin/yarn add select2 select2-bootstrap4-theme

Webpackerã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒã‚¤ãƒ³ãƒˆã«å«ã‚ã‚‹ app/javascript/packs/application.js

import 'crud'
import 'crud/fontawesome'
import 'crud/coreui'
// inputsã¯ä½¿ã†ã‚‚ã®ã ã‘を個別ã«importã—ã¦ã‚‚よã„
import 'crud/inputs'

layoutãªã©ã«bootstrap_flash_messagesを追加

設定変更

config/initializers/crud.rb ã«ä»¥ä¸‹ã®ã‚ˆã†ã«æ›¸ã

Crud.configure do |config|
  # https://github.com/plataformatec/simple_form/pull/1553 を利用ã™ã‚‹ã‹ã©ã†ã‹
  config.simple_form.use_valid_class = false

  config.icon.search = "fas fa-search"
end

設定値㯠lib/crud/config.rb ã‚’å‚照。

Crud::ApplicationController

モデルã®CRUD機能をæä¾›ã™ã‚‹ã‚³ãƒ³ 8000 トローラã®åŸºåº•クラス。 Rails標準ã®RESTful routesã«å‰‡ã£ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’æä¾›ã™ã‚‹ã€‚

アクションå 内容
index 一覧表示
show 詳細表示
new æ–°è¦ä½œæˆç”»é¢è¡¨ç¤º
edit 編集画é¢è¡¨ç¤º
create æ–°è¦ä½œæˆå‡¦ç†
update 更新処ç†
destroy 削除処ç†

ãれãžã‚Œã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒå®Ÿè¡Œã•れる時ã«ã€set_defaults, before_(アクションå), do_(アクションå) メソッドãŒå‘¼ã³å‡ºã•れる仕様ã«ãªã£ã¦ã„る。 何も実装ã—ãªãã¦ã‚‚デフォルトルールã«å¾“ã£ã¦å‹•作ã™ã‚‹ã‚ˆã†ã«ä½œã‚‰ã‚Œã¦ãŠã‚Šã€å‹•作をカスタマイズã—ãŸã„å ´åˆã ã‘protectedã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã—ãŸã‚Šã€ å„メソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦å®Ÿè£…ã™ã‚Œã°ã‚ˆã„。 最å°ã®ã‚³ãƒ¼ãƒ‰ä¾‹:

class UsersController < Crud::ApplicationController
  permit_keys :name, :age
end

indexアクションã«ã¤ã„ã¦ã¯æä¾›ã™ã‚‹æ©Ÿèƒ½ãŒå¤šã„ã®ã§ã€do_index内ã§ä»¥ä¸‹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã—ã¦ãŠã‚Šã€å€‹åˆ¥ã«ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãるよã†ã«ã—ã¦ã„る。

ãƒ¡ã‚½ãƒƒãƒ‰å æ©Ÿèƒ½ デフォルト処ç†
do_filter ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼å‡¦ç† params[:except_ids]を除外
do_query æ¤œç´¢ã‚½ãƒ¼ãƒˆå‡¦ç† ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰æ¤œç´¢, 詳細検索, ソートã®é …ã‚’å‚ç…§
do_page ページãƒãƒ¼ã‚·ãƒ§ãƒ³ params[:per] (デフォルト25)件毎ã®params[:page]ページ目を検索

crudã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã«å¯¾å¿œã™ã‚‹ãƒ¢ãƒ‡ãƒ«ã¯model, indexアクションã§è¡¨ç¤ºã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã¯resourcesã€ãã®ä»–ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§æ‰±ã†ãƒ‡ãƒ¼ã‚¿ã¯resourceを利用ã™ã‚‹ã€‚ ã“れらã¯helperメソッドã¨ã—ã¦å®šç¾©ã—ã¦ã„ã‚‹ãŸã‚ã€controllers, helpers, viewsã©ã“ã§ã‚‚使ãˆã‚‹ã‚ˆã†ã«ãªã£ã¦ã„る。

デフォルトã§ã¯modelã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©åã‹ã‚‰è§£æ±ºã•れる。例ãˆã°UsersControllerãªã‚‰ã°Userモデルを扱ã†ã€‚ 命åè¦ç´„ã«åã™ã‚‹ãƒ¢ãƒ‡ãƒ«ã‚’扱ã„ãŸã„å ´åˆã¯ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦æ˜Žç¤ºçš„ã«æŒ‡å®šã™ã‚‹ã€‚

resourcesã«ã¯ãƒ‡ãƒ•ォルトã§ã¯model.allãŒè¨­å®šã•れã¦ã„る。 例ãˆã°æ¤œç´¢å¯¾è±¡ã‚’モデル全体ã§ã¯ãªã特定ã®ç¯„囲ã«çµžã‚Šè¾¼ã¿ãŸã„å ´åˆãªã©ã¯ã€do_filterメソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦çµžã‚Šè¾¼ã‚“ã çµæžœã‚’è¿”ã™ã‚ˆã†ã«å®Ÿè£…ã™ã‚‹ã€‚ resourceã«ã¯model.find(params[:id])ã®çµæžœãŒè¨­å®šã•れã¦ã„る。

class FoosController < Crud::ApplicationController
  protected
  # デフォルトã§ã¯Fooãƒ¢ãƒ‡ãƒ«ãŒæ‰±ã‚れるãŒã€åˆ¥ã®ãƒ¢ãƒ‡ãƒ«ã‚’扱ã„ãŸã„å ´åˆã¯å®šç¾©
  def model
    User
  end

  # ä¸€è¦§ã§æ‰±ã†å¯¾è±¡ã‚’特定ã®scopeã«çµžã‚Šè¾¼ã¿ãŸã„å ´åˆ
  def do_filter
    resources.active unless params[:all]
  end

  # è«–ç†å‰Šé™¤ã«ã—ãŸã„
  def do_destroy
    resource.update_attribute(:deleted_at, DateTime.now)
  end
end

キーワード検索

params[:term]ã®å€¤ã§å„カラムをORæ¡ä»¶ã§æ¤œç´¢ã™ã‚‹ã€‚ デフォルトã§ã¯æ–‡å­—åˆ—ã€æ•°å€¤åž‹ã€åˆ—挙型ã®ä¸€è¦§è¡¨ç¤ºã‚«ãƒ©ãƒ ã‚’検索ã™ã‚‹ã€‚ 文字列ã¯like検索ã€ãã®ä»–ã¯å®Œå…¨ä¸€è‡´ã§æ¤œç´¢ã™ã‚‹ã€‚ ActiveRecordã®å ´åˆã¯é–¢é€£ã®æ¤œç´¢ã‚‚サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã€‚è©³ç´°ã¯æ¤œç´¢æ¡ä»¶ã®æŒ‡å®šã‚’å‚照。

詳細検索

params[:operator]ã¾ãŸã¯params[:op]ã§å„ã‚«ãƒ©ãƒ ã®æ¤œç´¢æ–¹æ³•を〠params[:value]ã¾ãŸã¯params[:v]ã¾ãŸã¯params直下ã§å„ã‚«ãƒ©ãƒ ã®æ¤œç´¢å€¤ã‚’指定ã™ã‚‹ã€‚

オペレータå åˆ¥å æ¤œç´¢å€¤ã®æ•°
equals = 1
not_equals != 1
contains ~ 1
not_contains !~ 1
any_of in *
greater_or_equal >= 1
less_or_equal <= 1
between <> 2
any * 0
none !* 0

operatorを指定ã—ãªã„å ´åˆã®ãƒ‡ãƒ•ォルトã¯equalsã§ã‚る。

# nameã«userãŒå«ã¾ã‚Œã‚‹usersを検索
/users?operator[name]=contains&value[name]=user
# ageãŒ20ã‹ã‚‰30ã®usersを検索
/users?op[age]=between&v[age][]=20&v[age][]=30
# name: user1, age: 18ã®usersを検索
/users?name=user1&age=18

ソート

params[:sort_key]ã«ã‚«ãƒ©ãƒ åã‚’ã€params[:sort_order]ã«ã‚½ãƒ¼ãƒˆé †(asc, desc)を指定ã™ã‚‹ã€‚ ソート順を指定ã—ãªã„å ´åˆã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯æ˜‡é †ã§ã‚る。

å„アクションã®å¯¾è±¡ã‚«ãƒ©ãƒ ãƒªã‚¹ãƒˆã®æŒ‡å®š

permit_keysã§æ›´æ–°å¯¾è±¡ã®ã‚«ãƒ©ãƒ ã‚’指定ã™ã‚‹ã€‚StrongParametersã¨åŒæ§˜ã®æŒ‡å®šæ–¹æ³•。 全アクション共通ã®å¯¾è±¡ã‚«ãƒ©ãƒ ã¯model_columnsメソッドã§å®šç¾©ã™ã‚‹ã€‚デフォルトã¯permit_keysã¨åŒã˜ã€‚ å„アクション毎ã®å¯¾è±¡ã‚«ãƒ©ãƒ ã¯columns_for_(index, show, create, update)ã§å®šç¾©ã™ã‚‹ã€‚デフォルトã¯model_columnsã¨åŒã˜ã€‚ 一覧表示ã®å„フォーマット毎ã®å‡ºåŠ›å¯¾è±¡ã‚«ãƒ©ãƒ ã¯columns_for_(MIMEタイプ)ã§å®šç¾©ã™ã‚‹ã€‚デフォルトã¯columns_for_indexã¨åŒã˜ã€‚ 検索対象カラムã¯columns_for_searchã§å®šç¾©ã™ã‚‹ã€‚デフォルトã¯columns_for_indexã®ã†ã¡æ–‡å­—åˆ—ã€æ•°å€¤åž‹ã€åˆ—挙型ã®ã‚«ãƒ©ãƒ ã€‚ 詳細検索対象ã®ã‚«ãƒ©ãƒ ã¯columns_for_advanced_searchã§å®šç¾©ã™ã‚‹ã€‚デフォルトã¯columns_for_indexã¨åŒã˜ã€‚

class FoosController < Crud::ApplicationController
  permit_keys :column1, :column2, array_column: [], hash_column: [:nested_column1, :nested_column2]

  protected
  def model_columns
    [:column1, :column2]
  end

  # 一覧画é¢ã®è¡¨ç¤ºé …ç›®
  def columns_for_index
    [:column1, :virtual_column]
  end

  # æ–°è¦ä½œæˆç”»é¢ã®è¡¨ç¤ºé …ç›®
  def columns_for_create
    [:column1]
  end

  # CSV出力時ã®é …ç›®
  def columns_for_csv
    model_columns
  end

  # 検索対象ã®ã‚«ãƒ©ãƒ 
  def columns_for_search
    [:column1]
  end

  # 詳細検索対象ã®ã‚«ãƒ©ãƒ 
  def columns_for_advanced_search
    [:column1]
  end
end

一覧画é¢ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³å®šç¾©ã¨ãƒªãƒ³ã‚¯è¡¨ç¤º

index_actionsメソッドã§ä¸€è¦§ç”»é¢ã®å„行ã”ã¨ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’定義ã§ãる。デフォルトã¯:show, :edit, :destroy

å„アクションã®ãƒªãƒ³ã‚¯è¡¨ç¤ºã‚’変更ã—ãŸã„å ´åˆã€ä»¥ä¸‹ã®å„ªå…ˆé †ã§ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã—ã¦ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã§ãる。

  1. helperã« #{controller_name}link_to#{action} ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
  2. helperã« link_to_#{action} ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
  3. helperã« #{controller_name}link_to#{action}_options ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
  4. helperã« link_to_#{action}_options ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装

カラムã®html表示

一覧や詳細画é¢ã§è¡¨ç¤ºã•れるカラムã®å†…容ã¯ã€ãƒ‡ãƒ•ォルトã§ã¯simple_formatã§å‡ºåŠ›ã•れる。 以下ã®å„ªå…ˆé †ã§ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã—ã¦è¡¨ç¤ºå†…容をカスタマイズã™ã‚‹ã“ã¨ãŒã§ãる。

  1. helperã« #{controller_name}_#{column_name}_html ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
  2. helperã« #{column_name}_html ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
  3. modelã« #{column_name}_label ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装

nameカラムをリンク表示ã«ã™ã‚‹ä¾‹

module UsersHelper
  def users_name_html(resource, value)
    link_to value, resource
  end
end

resourceã«ã¯ãƒ¢ãƒ‡ãƒ«ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã€valueã«ã¯ãã®ã‚«ãƒ©ãƒ ã«å¯¾å¿œã™ã‚‹å€¤ãŒæ¸¡ã•れる。 ã“ã®ä¾‹ã®å ´åˆ resource: Userインスタンス, value: nameã®å€¤

birth_dateカラムを / 区切りã®å¹´æœˆæ—¥è¡¨ç¤ºã«ã™ã‚‹ä¾‹

# helperã«å®Ÿè£…
module UsersHelper
  def users_birth_date_html(resource, value)
    value.try(:strftime, "%Y/%m/%d")
  end
end

# modelã«å®Ÿè£…
class User < ApplicationRecord
  def birth_date_label
    birth_date.try(:strftime, "%Y/%m/%d")
  end
end

カラムã®ç·¨é›†ãƒ•ォーム表示

編集画é¢ã§è¡¨ç¤ºã•れるカラムã®å†…容ã¯ã€ãƒ‡ãƒ•ォルトã¯simple_formã¨åŒã˜ã ãŒã€æ—¥ä»˜åž‹ã¯ãƒ”ッカーã§è¡¨ç¤ºã•れる。 以下ã®å„ªå…ˆé †ã§helperメソッドを定義ã—ã¦å…¥åŠ›ãƒ•ã‚©ãƒ¼ãƒ ã‚’ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã™ã‚‹ã“ã¨ãŒã§ãる。

  1. #{controller_name}_#{column_name}_input ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
  2. #{column_name}_input ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
  3. #{controller_name}_#{column_name}_input_options ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
  4. #{column_name}_input_options ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装

æ€§åˆ¥ã‚’é¸æŠžè‚¢ã«ã™ã‚‹ä¾‹

module UsersHelper
  def users_sex_input_options
    { as: :select, collection: [:male, :female] }
  end
end

simple_formã®inputã«æ¸¡ã™ã‚ªãƒ—ション値を返ã™ã‚ˆã†ã«å®Ÿè£…ã™ã‚‹ã€‚

入力フォーム全体を定義ã™ã‚‹ä¾‹

module UsersHelper
  def users_column1_input(f)
    content_tag(:div) do
      f.text_field(:column1) + javascript_tag("...")
    end
  end
end

カスタムインプット

  • :bootstrap_datepicker
  • :bootstrap_timepicker
  • :bootstrap_datetimepicker
  • :bootstrap_filestyle
  • :select2

検索æ¡ä»¶ã®æŒ‡å®š

キーワード検索

デフォルトã§ã¯ä¸€è¦§ã«è¡¨ç¤ºã•れã¦ã„る文字列ã¾ãŸã¯æ•°å€¤ã€åˆ—挙型ã®ã‚«ãƒ©ãƒ ãŒæ¤œç´¢å¯¾è±¡ã¨ãªã‚‹ã€‚ 検索対象ã®ã‚«ãƒ©ãƒ ã‚’変更ã—ãŸã„å ´åˆã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã«columns_for_searchメソッドを定義ã™ã‚‹ã€‚

デフォルトã§ã¯æ–‡å­—列カラムã¯like検索ã€ãれ以外ã¯å®Œå…¨ä¸€è‡´ã§æ¤œç´¢ã•れる。 検索æ¡ä»¶ã‚’変更ã—ãŸã„å ´åˆã‚„ã€DBã«å­˜åœ¨ã—ãªã„ä»®æƒ³ã‚«ãƒ©ãƒ ã«æ¤œç´¢æ¡ä»¶ã‚’æŒãŸã›ã‚‹å ´åˆãªã©ã«ã¯ã€ search_by_#{column_name} ã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚’ã‚ 8000 ³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã«å®šç¾©ã™ã‚‹ã€‚ 引数ã«ã¯æ¤œç´¢ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ãŒæ¸¡ã•れるã®ã§ã€ãれを使ã£ã¦æ¤œç´¢æ¡ä»¶ã‚’è¿”ã™ã‚ˆã†ã«å®Ÿè£…ã™ã‚Œã°ã‚ˆã„。 ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã›ãšã€å¾Œè¿°ã®è©³ç´°æ¤œç´¢ç”¨ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã™ã‚‹ã ã‘ã§ã‚‚よã„。

class User < ApplicationRecord
  def full_name
    "#{last_name} #{first_name}"
  end
end

class UsersController < Crud::ApplicationController
  protected
  def columns_for_search
    [:full_name, :email]
  end

  def search_by_full_name(term)
    ["last_name LIKE :term OR first_name LIKE :term", term: "%#{term}%"]
  end
end

ActiveRecordã®å ´åˆã¯é–¢é€£ã‚‚検索ã§ãる。 関連モデルã®search_fieldã¨ã„ã†åå‰ã®ã‚¯ãƒ©ã‚¹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã™ã‚‹ã¨ã€ 関連テーブルをjoinã—ã¦ãã®ã‚«ãƒ©ãƒ åã§æ¤œç´¢ã™ã‚‹ã€‚ search_fieldを指定ã—ãªã„å ´åˆã¯ã€ãƒ‡ãƒ•ォルトã§nameã¾ãŸã¯titleã¨ã„ã†ã‚«ãƒ©ãƒ ãŒç”¨ã„られる。

詳細検索

検索対象ã®ã‚«ãƒ©ãƒ ã‚’変更ã—ãŸã„å ´åˆã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã«columns_for_advanced_searchメソッドを定義ã™ã‚‹ã€‚

検索処ç†ã‚’変更ã—ãŸã„å ´åˆã¯ã€advanced_search_by_#{column_name} ã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚’コントローラã«å®šç¾©ã™ã‚‹ã‹ã€ モデルã®ã‚¯ãƒ©ã‚¹ãƒ¡ã‚½ãƒƒãƒ‰ã¨ã—ã¦å®šç¾©ã™ã‚‹ã€‚ 引数ã«ã¯operatorã¨æ¤œç´¢å€¤ãŒæ¸¡ã•れる。検索値ã®å€‹æ•°ã¯å¯å¤‰ãªã®ã§ã€å¯å¤‰é•·å¼•æ•°ã§å®šç¾©ã™ã‚‹ã¨ã‚ˆã„。

実装例㯠spec/dummy/app/models/ar/user.rb ã‚’å‚照。

詳細検索フォームを変更ã—ãŸã„å ´åˆã¯ã€ä»¥ä¸‹ã®å„ªå…ˆé †ã§helperメソッドを定義ã—ã¦ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã™ã‚‹ã“ã¨ãŒã§ãる。

  1. #{controller_name}_#{column_name}_search_input
  2. #{column_name}_search_input
  3. #{controller_name}_#{column_name}_search_input_options
  4. #{column_name}_search_input_options
  5. #{controller_name}_#{column_name}_input_options
  6. #{column_name}_input_options

search_inputメソッドã®å¼•æ•°ã«ã¯simple_form_forã®builder, operator, æ¤œç´¢å€¤ãŒæ¸¡ã•れる。検索値ã®å€‹æ•°ã¯å¯å¤‰ãªã®ã§ã€å¯å¤‰é•·å¼•æ•°ã§å®šç¾©ã™ã‚‹ã€‚ search_input_optionsã¨input_optionsメソッドã¯å¼•æ•°ãªã—ã§ã€input_optionsメソッドã¯ç·¨é›†ãƒ•ォームã§ã‚‚使ã‚れる。

詳細検索ã®ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã‚’変更ã—ãŸã„å ´åˆã¯ã€ä»¥ä¸‹ã®å„ªå…ˆé †ã§helperメソッドを定義ã—ã¦ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã™ã‚‹ã“ã¨ãŒã§ãる。

  1. #{controller_name}_#{column_name}_search_operator_options
  2. #{column_name}_search_operator_options

詳細検索フォームカスタマイズã®å®Ÿè£…例㯠spec/dummy/app/helpers/users_helper.rb ã‚’å‚照。

ソートæ¡ä»¶ã€ãƒšãƒ¼ã‚¸ãƒãƒ¼ã‚·ãƒ§ãƒ³ä»¶æ•°ã®æŒ‡å®š

デフォルトã®ã‚½ãƒ¼ãƒˆæ¡ä»¶ã‚„ページãƒãƒ¼ã‚·ãƒ§ãƒ³ä»¶æ•°ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãる。 ページãƒãƒ¼ã‚·ãƒ§ãƒ³ä»¶æ•°ã¯ãƒ‡ãƒ•ォルト25件。

class SampleController < Crud::ApplicationController
  default_sort_key :name
  default_sort_order :desc
  default_paginates_per 10
end

カラム毎ã«ã‚½ãƒ¼ãƒˆæ¡ä»¶ã‚’カスタマイズã—ãŸã„å ´åˆã€sort_by_#{column_name} ã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚’コントローラã«å®šç¾©ã™ã‚‹ã€‚ 引数ã«ã¯:ascã¾ãŸã¯:descãŒæ¸¡ã•れるã®ã§ã€ãれを使ã£ã¦ã‚½ãƒ¼ãƒˆæ¡ä»¶ã‚’è¿”ã™ã‚ˆã†ã«å®Ÿè£…ã™ã‚Œã°ã‚ˆã„。

class UsersController < Crud::ApplicationController
  protected
  def sort_by_full_name(order)
    "last_name #{order}, first_name #{order}"
  end
end

権é™åˆ¶å¾¡

権é™åˆ¶å¾¡ã‚’ã—ãŸã„å ´åˆã¯app/authorizationsã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã¨åŒåã®Authorizationクラスを定義ã™ã‚‹ã€‚ å„アクションã®å®Ÿè¡Œã‚’許å¯ã™ã‚‹ã‹ã©ã†ã‹ã‚’メソッド定義ã—ã¦true/falseã‚’è¿”ã™ã‚ˆã†ã«å®Ÿè£…ã™ã‚Œã°ã‚ˆã„。

特殊ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¨ã—ã¦ã€manageを定義ã™ã‚‹ã¨create, update, destroyã®æ¨©é™ã‚’ã¾ã¨ã‚ã¦åˆ¶å¾¡ã§ãる。 アクションã«å¯¾å¿œã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã—ãªã„å ´åˆã®ãƒ‡ãƒ•ォルト値ã¯trueã§ã‚る。

# 暗黙的ã«UsersControllerã§ç”¨ã„られる
class UsersAuthorization < Crud::Authorization::Default
  def create?(user)
    false
  end

  def manage?(user)
    user == current_user
  end
end

メソッドã®å¼•æ•°ã«ã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—よã†ã¨ã—ã¦ã„る対象ã®ãƒ¬ã‚³ãƒ¼ãƒ‰ãŒæ¸¡ã•れる。 ã¾ãŸã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã®current_userãŒæ¸¡ã•れるãŸã‚ã€ãƒ­ã‚°ã‚¤ãƒ³ãƒ¦ãƒ¼ã‚¶ã«ã‚ˆã‚‹åˆ¶å¾¡ã‚‚å¯èƒ½ã€‚

コントローラã«Authorizationã¨ã„ã†åå‰ã®ã‚¤ãƒ³ãƒŠãƒ¼ã‚¯ãƒ©ã‚¹ã‚’定義ã—ã¦ã‚‚よã„。

class UsersController < Crud::ApplicationController
  class Authorization < Crud::Authorization::Default
    def create?(user)
      false
    end

    def manage?(user)
      user == current_user
    end
  end
end

acts_as_permissible

ãƒªã‚½ãƒ¼ã‚¹æ¯Žã«æ¨©é™ã‚’ç´°ã‹ã設定ã—ãŸã„å ´åˆã«ä½¿ã†ãƒ©ã‚¤ãƒ–ラリ。

rails generate permissible:install

権é™åˆ¶å¾¡ã—ãŸã„モデルã”ã¨ã«ä»»æ„ã®ãƒ­ãƒ¼ãƒ«åã¨å€¤ã‚’ビットã§å®šç¾©ã—ã€åŒ…å«é–¢ä¿‚を作るã“ã¨ãŒã§ãる。

class Article < ApplicationRecord
  acts_as_permissible(admin: 0b111, write: 0b011, read: 0b001, default: 0b001)
end

上記ã®å ´åˆã€write権é™ã‚’æŒã¤ãƒ­ãƒ¼ãƒ«ã¯admin, writeã§ã€read権é™ã‚’æŒã¤ãƒ­ãƒ¼ãƒ«ã¯admin, write, readã«ãªã‚‹ã€‚

TODO

å„アクションã®è¡¨ç¤ºçµæžœã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚º

çµæžœã®ãƒ•ォーマットã¯html, js, jsonã«å¯¾å¿œã€‚indexã®ã¿csvã«ã‚‚対応。 htmlã¨jsã¯views/crud/applicationã®ãƒ†ãƒ³ãƒ—レートãŒç”¨ã„られるãŸã‚ã€ã“れをcontrollerã«å¯¾å¿œã™ã‚‹viewã¨ã—ã¦ã‚³ãƒ”ーã—ã¦ç·¨é›†ã™ã‚Œã°ã‚ˆã„。 jsonã¯active_model_serializersを用ã„ã¦å‡ºåŠ›ã•れる。 app/serializersã«ãƒ¢ãƒ‡ãƒ«ã«å¯¾å¿œã™ã‚‹ã‚·ãƒªã‚¢ãƒ©ã‚¤ã‚¶ãƒ¼ã‚’定義ã™ã‚Œã°ãれãŒç”¨ã„られる。

特定ã®ãƒ•ォーマットã®å‹•ä½œè‡ªä½“ã‚’æ›¸ãæ›ãˆãŸã„å ´åˆã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦superã«ãƒ–ロックを渡ã™ã“ã¨ãŒã§ãる。

def create
  super do |format|
    format.html { ... }
  end
end

編集画é¢ã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã€ä½œæˆ/更新時ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã‚’変更ã—ãŸã„å ´åˆã€cancel_pathをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã¨ã‚ˆã„。デフォルトã§ã¯ä¸€è¦§ç”»é¢ã«æˆ»ã‚‹ã€‚ 削除時ã¯request.refererã«æˆ»ã‚‹ã€‚

ジェãƒãƒ¬ãƒ¼ã‚¿

# モデル + crudコントローラ生æˆ
rails generate crud:scaffold User group:references name age:integer
# crudコントローラ生æˆ
rails generate crud:controller Users group_id name age
# crudã®viewã‚’app/views/crud/applicationã«ã‚³ãƒ”ー
rails generate crud:application_views
# crudã®viewをコントローラå˜ä½ã§ã‚³ãƒ”ー
rails generate crud:views users

モーダルピッカー

include Crud::ModalPickerController

f.input as: :modal_picker, url: picker_controllers_path

TODO

ウィザード

include Crud::Wizard

TODO

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  
0