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

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

Rails7.1 | 動画学習アプリ作成 | 20 | trestle

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



19 | ページ作成】 << 【ホーム】 >> 【21 | プロジェクトとタスクモデル



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


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


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

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(5行目)

//= link trestle/auth/userbox.css



app\assets\config\manifest.js

//= link_tree ../images
//= link_directory ../stylesheets .css
//= link_tree ../../javascript .js
//= link_tree ../../../vendor/javascript .js
//= 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 :dashboard, icon: "fa fa-tachometer"
    end
    controller do 
        def index
            @user_count = User.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-primary">
                    <div class="card text-white text-center">
                        <h1><%= @user_count %></h1>
                        <p>ユーザー</p>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>



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

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


ユーザー管理



ユーザ管理が出来るようにします。
「GemFile」に以下の記述を追加します。
「trestle-active_storage」はRails7.1で動作しなくなりましたので外しています。


GemFile

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



インストールします。
コマンド
bundle


ユーザーテーブルにboolean型のactiveカラムを追加します。
コマンド
rails g migration AddActiveToUser active:boolean


「db\migrate\20200712035153_add_active_to_user.rb」ファイルを以下のように編集します。


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

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



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


ユーザー管理ビューを作成します。
コマンド
rails g trestle:resource User


「app\admin\users_admin.rb」ファイルを以下のように更新します。


記述更新 app\admin\users_admin.rb

Trestle.resource(:users) do

  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
  end

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

end



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


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

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



19 | ページ作成】 << 【ホーム】 >> 【21 | プロジェクトとタスクモデル





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