はじめに(Rails 7)
項目一覧
注意
このチュートリアルは Ruby on Rails 7 向けです。使用しているバージョンがこれと異なる場合は、ナビゲーション メニューから Rails バージョンに適したチュートリアルを選択してください。
新しいアプリケーション
このセクションでは、Mongoid ODM を使用して新しい Ruby on Rails アプリケーションを作成する方法を説明します。データ アクセス用の MongoDB の ORM のようなライブラリを備えた Rails のデフォルトである ActiveRecord アダプターを使用して、「Rails で Ruby をはじめる」ガイドで説明されているブログ アプリケーションに似たアプリケーションを作成します。
このアプリケーションの完全なソースコードは、 mongoid-demoGithub リポジトリ にあります。 。
注意
このガイドでは Ruby on Rails に関する基本的な知識があることを前提としています。 Ruby on Rails の詳細については、「 使用 開始 」ガイド を参照してください またはその他の Rails ガイドを参照してください。
インストール rails
Rails ジェネレーターを使用してアプリケーションのスケルトンを作成します。そのためには、まず rails
gem をインストールします。
gem install rails -v 7.1
新しいアプリケーションを作成する
次のように、rails
コマンドを使用してアプリケーション スケルトンを作成します。
rails new blog --skip-active-record cd blog
代わりに Mongoid を使用するため、ActiveRecord が依存関係として追加されないようにリクエストするために --skip-active-record
を渡します。
オプションでテストをスキップする
RSpec でアプリケーションのテストを考えている場合、--skip-test
オプションと --skip-system-test
オプションを渡すことで、ジェネレーターにデフォルトの Rails テスト設定を省略するように指示できます。
rails new blog --skip-active-record --skip-test --skip-system-test cd blog
Mongoidを設定する
1 。 を変更してGemfile
mongoid への参照を追加します gem:
gem 'mongoid'
gem の依存関係をインストールします。
bundle install
デフォルトの Mongoid 構成を生成します。
bin/rails g mongoid:config
このジェネレーターは、 config/mongoid.yml
構成ファイル(MongoDB 配置への接続を構成するために使用)とconfig/initializers/mongoid.rb
初期化ファイル(その他の Mongoid 関連の構成に使用される場合があります)を作成します。 ActiveRecord を使用していないため、 database.yml
ファイルは存在しないことに注意してください。
自己管理型 MongoDB の構成
前の手順で作成された構成は、MongoDB サーバーがローカルで実行されている場合に適しています。 ローカル MongoDB サーバーがまだない場合は、MongoDB をダウンロードしてインストールします。
生成された mongoid.yml
は変更せずに動作しますが、開発時にはサーバー選択のタイムアウトを短縮することをお勧めします。この変更により、 mongoid.yml
のコメントされていない行は次のようになります。
development: clients: default: database: blog_development hosts: - localhost:27017 options: server_selection_timeout: 1
MongoDB Atlas の構成
MongoDB をダウンロードしてローカルにインストールして実行する代わりに、無料の MongoDB Atlas アカウントを作成し、 Atlas に無料の MongoDB クラスターを作成できます。 クラスターが作成されたら、クラスターページに接続する手順に従って URI を取得します。 Ruby ドライバー2.5以降の形式を使用します。
URI を config/mongoid.yml
ファイルに貼り付け、定義されているホストをコメント アウトします。Atlas を使用する場合、開発環境ではサーバー選択タイムアウトを 5 秒に設定することをお勧めします。
config/mongoid.yml
のコメント解除された内容は次のようになります。
development: clients: default: uri: mongodb+srv://user:pass@yourcluster.mongodb.net/blog_development?retryWrites=true&w=majority options: server_selection_timeout: 5
アプリケーションを実行する
次のコマンドを実行してアプリケーション サーバーを起動できます。
bin/rails s
3000ローカルホストに移動してアプリケーションにアクセスします。 。
投稿を追加する
Mongoid は標準の Rails スキャフォールディングを使用して、ブログに必要なモデル、コントローラー、ビュー ファイルを生成し、すぐにブログ投稿の作成を開始できるようにします。
bin/rails g scaffold Post title:string body:text
localhost に移動します:3000 /posts 投稿を作成し、すでに作成されている投稿を確認するには、。
コメントを追加する
アプリケーションをよりインタラクティブにするために、ユーザーが投稿にコメントを追加できる機能を追加しましょう。
Comment
モデルを作成します。
bin/rails g scaffold Comment name:string message:string post:belongs_to
Post
モデル ファイル app/models/post.rb
を開き、コメントの has_many
関連付けを追加します。
class Post include Mongoid::Document include Mongoid::Timestamps field :title, type: String field :body, type: String has_many :comments, dependent: :destroy end
app/views/posts/show.html.erb
を開き、既存のコメントをレンダリングし、新しいコメントを残すように促すセクションを追加します。
<section class="section comments"> <div class="container"> <h2 class="subtitle is-5"> <strong><%= @post.comments.count %></strong> Comments </h2> <%= render @post.comments %> <div class="comment-form"> <hr /> <h3 class="subtitle is-3">Leave a reply</h3> <%= render partial: 'comments/form', locals: { comment: @post.comments.build } %> </div> </div> </section>
app/views/comments/_form.html.erb
を開き、:message
のフィールド型を text_field
から text_area
に変更し、:post_id
のフィールド型を text_field
から hidden_field
に変更します。結果は次のようになります。
<%= form_with(model: comment, local: true) do |form| %> <% if comment.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(comment.errors.count, "error") %> prohibited this comment from being saved:</h2> <ul> <% comment.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= form.label :name %> <%= form.text_field :name %> </div> <div class="field"> <%= form.label :message %> <%= form.text_area :message %> </div> <div class="field"> <%= form.hidden_field :post_id %> </div> <div class="actions"> <%= form.submit %> </div> <% end %>
次に、app/view/comments/_comment.html.erb
を次の内容に置き換えます。
<p> <strong><%= comment.name %>:</strong> <%= comment.message %> <%= link_to 'Delete', [comment], data: { "turbo-method": :delete, "turbo-confirm": 'Are you sure?' } %> </p>
これで、投稿にコメントを残すことができるようになります。
既存のアプリケーション
Mongoid は既存の Rails アプリケーションに簡単に追加でき、他の ActiveRecord アダプターと一緒に実行できます。これがユースケースである場合、依存関係を更新し、構成ファイルに入力することで、アプリケーション内で MongoDB の使用を開始できます。
既存の Ruby on Rails アプリケーションを ActiveRecord の代わりに Mongoid を使用するように切り替えるには、以下に説明するように追加の構成変更が必要になります。
Dependencies
まず、mongoid
gem を Gemfile
に追加する必要があります。
gem 'mongoid'
Mongoid が 唯一の データベース アダプターである場合は、Gemfile
に記載されている sqlite
や pg
などの RDBMS ライブラリを削除するか、コメント アウトします。
gem の依存関係をインストールします。
bundle install
Mongoid の構成
デフォルトの Mongoid 設定を生成します。
bin/rails g mongoid:config
このジェネレーターは、config/mongoid.yml
構成ファイル(MongoDB 配置への接続を構成するために使用)と config/initializers/mongoid.rb
初期化ファイル(その他の Mongoid 関連の構成に使用される場合があります)を作成します。一般に、すべての Mongoid 構成には mongoid.yml
を使用することをお勧めします。
MongoDB の配置方法を決定し、それに合わせて Mongoid 構成(config/mongoid.yml
)を調整するには、「セルフマネージド MongoDB 用の構成」および「MongoDB Atlas 用の構成」のセクションを確認してください。
ロードされたフレームワーク
config/application.rb
を調べます。require 'rails/all'
経由で Rails のすべてのコンポーネントが必要な場合は、個別のフレームワークを要求するように変更します。お使いのバージョンの rails/all
の内容を確認するには、Github リポジトリ を参照してください。
# Remove or comment out #require "rails/all" # Add the following instead of "rails/all": require "rails" # require "active_record/railtie" rescue LoadError # require "active_storage/engine" rescue LoadError require "action_controller/railtie" rescue LoadError require "action_view/railtie" rescue LoadError require "action_mailer/railtie" rescue LoadError require "active_job/railtie" rescue LoadError require "action_cable/engine" rescue LoadError # require "action_mailbox/engine" rescue LoadError # require "action_text/engine" rescue LoadError require "rails/test_unit/railtie" rescue LoadError
警告
ActiveRecord に依存しているため、ActionText、ActiveStorage および ActionMailbox は Mongoid では使用できません。
ActiveRecord の構成
すべての構成ファイル(config/application.rb
、config/environments/{development,production.test}.rb
)を確認し、config.active_record
および config.active_storage
への参照を削除するかコメント アウトします。
モデルを調整する
アプリケーションにすでにモデルがある場合は、ActiveRecord から Mongoid に移行するときにこれらを変更する必要があります。
ActiveRecord モデルは ApplicationRecord
から派生しており、列定義がありません。Mongoid モデルには通常スーパークラスはありませんが、Mongoid::Document
を含める必要があり、通常はフィールドを明示的に定義します(ただし、明示的なフィールド定義の代わりに 動的フィールド を使用することもできます)。
たとえば、ActiveRecord では、必要最低限の Post モデルは次のようになります。
class Post < ApplicationRecord has_many :comments, dependent: :destroy end
同じモデルは Mongoid では次のようになります。
class Post include Mongoid::Document field :title, type: String field :body, type: String has_many :comments, dependent: :destroy end
または、動的フィールドの場合は次のようになります。
class Post include Mongoid::Document include Mongoid::Attributes::Dynamic has_many :comments, dependent: :destroy end
MongoDB ではデータを保存する前にスキーマを定義する必要がないため、Mongoid は ActiveRecord 移行を利用しません。
データ移行
MongoDB に転送したいデータがリレーショナル データベースにすでにある場合は、データ移行を実行する必要があります。前述のように、MongoDB ではデータを保存するために事前定義されたスキーマは必要ないため、スキーマの移行は必要ありません。
移行ツールは多くの場合、移行されるデータに固有であり、Mongoid は ActiveRecord 関連付けのスーパーセットをサポートしていますが、コレクションにモデル参照を保存する方法は Mongoid と ActiveRecord で異なるためです。 つまり、MongoDB には、 RDBMS から MongoDB への 移行ガイド など、RDBMS から MongoDB へ の移行に関するリソースがいくつかあります および モダナイゼーション ガイド 。
Rails API
Mongoid を使用して Rails API アプリケーションを作成するプロセスは、通常のアプリケーションを作成する場合と同じですが、唯一の変更点は --api
パラメーターを rails new
に変更することです。Rails API アプリケーションを Mongoid に移行するには、通常の Rails アプリケーションの場合と同じ手順に従います。
このチュートリアルで説明されているものに似た完全な Rails アプリケーションはAPI 、 mongoid-demoGithub リポジトリ にあります。 。