Docs Menu
Docs Home
/ / /
Mongoid
/

はじめに(Rails 7)

項目一覧

  • 新しいアプリケーション
  • インストール rails
  • 新しいアプリケーションを作成する
  • Mongoidを設定する
  • アプリケーションを実行する
  • 投稿を追加する
  • コメントを追加する
  • 既存のアプリケーション
  • Dependencies
  • Mongoid の構成
  • ロードされたフレームワーク
  • ActiveRecord の構成
  • モデルを調整する
  • データ移行
  • Rails API

注意

このチュートリアルは 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 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

1 。 を変更してGemfile mongoid への参照を追加します gem:

Gemfile
gem 'mongoid'
  1. gem の依存関係をインストールします。

bundle install
  1. デフォルトの Mongoid 構成を生成します。

bin/rails g mongoid:config

このジェネレーターは、 config/mongoid.yml構成ファイル(MongoDB 配置への接続を構成するために使用)とconfig/initializers/mongoid.rb初期化ファイル(その他の Mongoid 関連の構成に使用される場合があります)を作成します。 ActiveRecord を使用していないため、 database.ymlファイルは存在しないことに注意してください。

前の手順で作成された構成は、MongoDB サーバーがローカルで実行されている場合に適しています。 ローカル MongoDB サーバーがまだない場合は、MongoDB をダウンロードしてインストールします。

生成された mongoid.yml は変更せずに動作しますが、開発時にはサーバー選択のタイムアウトを短縮することをお勧めします。この変更により、 mongoid.ymlのコメントされていない行は次のようになります。

development:
clients:
default:
database: blog_development
hosts:
- localhost:27017
options:
server_selection_timeout: 1

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 関連付けを追加します。

app/models/post.rb
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 を開き、既存のコメントをレンダリングし、新しいコメントを残すように促すセクションを追加します。

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 に変更します。結果は次のようになります。

app/views/comments/_form.html.erb
<%= 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 を次の内容に置き換えます。

app/views/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 を使用するように切り替えるには、以下に説明するように追加の構成変更が必要になります。

まず、mongoid gem を Gemfile に追加する必要があります。

Gemfile
gem 'mongoid'

Mongoid が 唯一の データベース アダプターである場合は、Gemfile に記載されている sqlitepg などの RDBMS ライブラリを削除するか、コメント アウトします。

gem の依存関係をインストールします。

bundle install

デフォルトの 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 リポジトリ を参照してください。

config/application.rb
# 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 に依存しているため、ActionTextActiveStorage および ActionMailbox は Mongoid では使用できません。

すべての構成ファイル(config/application.rbconfig/environments/{development,production.test}.rb)を確認し、config.active_record および config.active_storage への参照を削除するかコメント アウトします。

アプリケーションにすでにモデルがある場合は、ActiveRecord から Mongoid に移行するときにこれらを変更する必要があります。

ActiveRecord モデルは ApplicationRecord から派生しており、列定義がありません。Mongoid モデルには通常スーパークラスはありませんが、Mongoid::Document を含める必要があり、通常はフィールドを明示的に定義します(ただし、明示的なフィールド定義の代わりに 動的フィールド を使用することもできます)。

たとえば、ActiveRecord では、必要最低限​​の Post モデルは次のようになります。

app/models/post.rb
class Post < ApplicationRecord
has_many :comments, dependent: :destroy
end

同じモデルは Mongoid では次のようになります。

app/models/post.rb
class Post
include Mongoid::Document
field :title, type: String
field :body, type: String
has_many :comments, dependent: :destroy
end

または、動的フィールドの場合は次のようになります。

app/models/post.rb
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 へ の移行に関するリソースがいくつかあります および モダナイゼーション ガイド

Mongoid を使用して Rails API アプリケーションを作成するプロセスは、通常のアプリケーションを作成する場合と同じですが、唯一の変更点は --api パラメーターを rails new に変更することです。Rails API アプリケーションを Mongoid に移行するには、通常の Rails アプリケーションの場合と同じ手順に従います。

このチュートリアルで説明されているものに似た完全な Rails アプリケーションはAPI 、 mongoid-demoGithub リポジトリ にあります。 。

戻る

はじめに(Sinatra)