学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Ruby on Rails | trestleの利用

↓↓クリックして頂けると励みになります。



TrestleはRuby on Railsプロジェクトで管理画面を迅速に構築し、カスタマイズしやすくするための強力なツールです。
これにより、開発者はアプリケーションのコア機能に専念し、時間と労力を節約できます。


trestleは、Ruby on Railsアプリケーションに簡単に管理画面を追加することができます。
コードの繰り返しを減らし、管理画面の作成を迅速化します。
これにより、時間とリソースを節約できます。


プロジェクトのGemfileにTrestleを追加します。
最新バージョンのTrestleを使用する場合、以下の行を追加します。
記述追加 GemFile

gem 'trestle', '~> 0.9.3'
gem 'trestle-auth', '~> 0.4.0'



コマンド
bundle


コマンド(2つ)
rails g trestle:install


rails g trestle:auth:install


コマンド マイグレーション適用
rails db:migrate


管理ユーザを登録します。


コマンド
rails c


以下のようにコマンド待機状態になります。

コマンド待機状態
コマンド待機状態



コマンドで管理ユーザを登録します。
メールアドレス、パスワード、氏名はご自分のものを入れて下さい。
Administrator.create(email:"win.rails.learn@gmail.com",password:"123456",first_name:"testsite",last_name:"administrator")


exitでコマンド待機状態を抜けて下さい。


もし、以下のようなエラーが出て登録できない場合、Springを無効にすると解決できます
エラー

objc[873]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
objc[873]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.



解決策
コマンド

export DISABLE_SPRING=true



「app\assets\config\manifest.js」ファイルに以下の記述を追加します。


記述追加 app\assets\config\manifest.js(3行目)

//= link trestle/auth/userbox.css



app\assets\config\manifest.js

//= link_tree ../images
//= link_directory ../stylesheets .css
//= link trestle/auth/userbox.css



ブラウザ確認
http://localhost:3000/admin/


コマンドで追加した管理ユーザでログインします。

管理ユーザでログイン
管理ユーザでログイン



ログインできました。

ログイン成功
ログイン成功



trestle管理画面にダッシュボードを作成します。


「app\admin」フォルダに「dashboard_admin.rb」ファイルを新規作成して下さい。


app\admin\dashboard_admin.rb(新規作成したファイル)

Trestle.admin(:dashboard) do
    menu do
        item :ダッシュボード, icon: "fa fa-tachometer"
    end
    controller do 
        def index
            @user_count = User.count()
            @report_count = Report.count()
            @category_count = Category.count()
        end
    end
end



「app\views」フォルダに「admin」フォルダを新規作成して下さい。
作成した「admin」フォルダに「dashboard」フォルダを新規作成します。
作成した「admin\dashboard」フォルダに「index.html.erb」ファイルを新規作成します。



app\views\admin\dashboard\index.html.erb(新規作成したファイル)

<div class="main-content-area">
    <div class="main-content-container">
        <div class="main-content">
            <div class="row">
                <div class="col-md-3 bg-success">
                    <div class="card text-white text-center">
                        <h1><%= @user_count %></h1>
                        <p>ユーザー</p>
                    </div>
                </div>            
                <div class="col-md-3 bg-primary">
                    <div class="card text-white text-center">
                        <h1><%= @category_count %></h1>
                        <p>カテゴリー</p>
                    </div>
                </div>
                <div class="col-md-3 bg-warning">
                    <div class="card text-white text-center">
                        <h1><%= @report_count %></h1>
                        <p>記事</p>
                    </div>
                </div>

            </div>
        </div>
    </div>
</div>



ブラウザ確認
http://localhost:3000/admin/

管理ダッシュボード
管理ダッシュボード



trestleでユーザ管理が出来るようにします。


「GemFile」に以下の記述を追加します。


GemFile

gem 'trestle-search', '~> 0.4.2'

gem 'trestle-active_storage', '~> 3.0'
gem "mini_magick"
gem 'image_processing', '~> 1.2'



コマンド
bundle


ユーザテーブルに「有効化」と「無効化」を切り替えできるフィールドを作成します。


コマンド
rails g migration AddActiveToUser active:boolean


「db\migrate\20200802081937_add_active_to_user.rb」ファイルを編集します。


記述更新 db\migrate\20200802081937_add_active_to_user.rb
3行目に「, default: true」の記述を追加しています。

class AddActiveToUser < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :active, :boolean, default: true
  end
end



コマンド マイグレーション適用
rails db:migrate


「app\admin」フォルダに「users_admin.rb」ファイルを新規作成します。


app\admin\users_admin.rb(新規作成したファイル)

Trestle.resource(:users) do

  remove_action :new
  remove_action :destroy

  menu do
    item :登録ユーザー, icon: "fa fa-user"
  end

  table do
    column :full_name
    column :email
    column :active
    column :created_at, align: :center
    actions do |toolbar, instance, admin|
      toolbar.link '有効化', admin.path(:activate, id: instance.id), method: :post, class: 'bg-success'
      toolbar.link '無効化', admin.path(:deactivate, id: instance.id), method: :post, class: 'bg-danger'
    end
  end

  controller do
    def activate
      user = admin.find_instance(params)
      user.update(active: true)
      flash[:message] = "ユーザが有効化されました"
      redirect_to admin.path(:show, id: user)
    end

    def deactivate
      user = admin.find_instance(params)
      user.update(active: false)
      flash[:message] = "ユーザが無効化されました"
      redirect_to admin.path(:show, id: user)
    end
  end

  routes do
    post :activate, on: :member
    post :deactivate, on: :member
  end
  
  form do |user|
    text_field :full_name
    text_field :email
    active_storage_field :avatar
  end

  search do |query|
    if query
      User.where("email ILIKE ? OR full_name ILIKE ?", "%#{query}%", "%#{query}%")
    else
      User.all
    end
  end

  active_storage_fields do
    [:avatar]
  end

end



ブラウザ確認
http://localhost:3000/admin/users


登録ユーザの管理ができるようになりました。

登録ユーザー管理
登録ユーザー管理



アバター画像のアップロードもできます。

登録ユーザー管理
登録ユーザー管理



↓↓クリックして頂けると励みになります。