Docs Menu
Docs Home
/ / /
Mongoid
/

はじめに(Rails 6)

項目一覧

  • 新しいアプリケーション
  • インストール rails
  • 新しいアプリケーションを作成する
  • Git リポジトリの作成
  • Mongoid を追加する
  • MongoDB をローカルで実行
  • MongoDB Atlas の使用
  • その他の Rail 依存関係
  • アプリケーションを実行する
  • 投稿を追加する
  • コメントを追加する
  • 既存のアプリケーション
  • Dependencies
  • ロードされたフレームワーク
  • ActiveRecord の構成
  • プロセス停止
  • Mongoid の構成
  • モデルを調整する
  • データ移行
  • Rails API

注意

このチュートリアルは Ruby on Rails 6向けです。 使用しているバージョンがこれと異なる場合は、ナビゲーション メニューから Rails バージョンに適したチュートリアルを選択してください。

このセクションでは、データアクセス用に Mongoid を使用して新しい Ruby on Rails アプリケーションを作成する方法を説明します。 このアプリケーションは、 Ruby on Rails Getting Started で説明されているブログ アプリケーションに似ています。 ガイドを使用しますが、データベース アダプターとして ActiveRecord ではなく Mongoid を使用します。

このアプリケーションの完全なソースコードは、 mongoid-demoGithub リポジトリ にあります。 。

注意

このガイドでは Ruby on Rails に関する基本的な知識があることを前提としています。 Ruby on Rails の詳細については、「 使用 開始 」ガイド を参照してください またはその他の Rails ガイドを参照してください。

Rails ジェネレーターを使用してアプリケーションのスケルトンを作成します。そのためには、まず rails gem をインストールします。

gem install rails -v '~> 6.0'

次のように、rails コマンドを使用してアプリケーション スケルトンを作成します。

rails new blog --skip-active-record --skip-bundle
cd blog

注意

次のような警告が表示される場合があります。

Could not find gem 'puma (~> 3.11)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

すぐに gem のインストールを処理するため、無視します。

代わりに Mongoid を使用するため、ActiveRecord が依存関係として追加されないようにリクエストするために--skip-active-recordを渡します。 さらに、 Gemfileを変更してmongoid依存関係を追加するため、 --skip-bundleを渡します。

RSpec でアプリケーションのテストを考えている場合、 オプションと オプションを渡すことで、ジェネレーターにデフォルトの Rails テスト設定を省略するように指示できます。--skip-test--skip-system-test

rails new blog --skip-bundle --skip-active-record --skip-test --skip-system-test
cd blog

必須ではありませんが、アプリケーション用に Git リポジトリを作成することをお勧めします。

git init .
git add .
git commit

このチュートリアルに従い、変更をコミットします。

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

Gemfile
gem 'mongoid'

注意

Rails 6.0を使用するには、Mongoid 7.0.5以上が必要です。

  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

これが最初に作成する Rails アプリケーションである場合は、コンピューターに Node.js をインストールする必要がある場合があります。 これはオペレーティング システム パッケージまたは バイナリをダウンロードする ことで実行できます

次に、YAN がインストールされていない場合 は、インストールの手順に従ってください 。

最後に、webcmer をインストールします。

rails webpacker:install

次のコマンドを実行してアプリケーション サーバーを起動できます。

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
field :title, type: String
field :body, type: String
has_many :comments, dependent: :destroy
end

注意

次の操作は、Mongoid のバージョンが7.0.8または7.1.2未満を使用している場合にのみ必要です。 (次を参照 MONGOID- 4885 詳細は)

Commentモデル ファイルapp/models/comment.rbを開き、生成されたembedded_inの関連付けをbelongs_toに変更します。

app/models/comment.rb
class Comment
include Mongoid::Document
field :name, type: String
field :message, type: String
belongs_to :post
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>

コメント フォーム ファイルを開き、 :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/views/comments/_comment.html.erbを作成します。

app/views/comments/_comment.html.erb
<p>
<strong><%= comment.name %>:</strong>
<%= comment.message %>
<br>
<%= link_to 'Delete', [comment],
method: :delete,
class: "button is-danger",
data: { confirm: 'Are you sure?' } %>
</p>

これで、投稿にコメントを残すことができるようになります。

新しいコメントが追加されたブログのスクリーンショット

既存の Ruby on Rails アプリケーションを ActiveRecord の代わりに Mongoid を使用するように切り替えるには、次の手順に従います。

Gemfileに記載されているsqlitepgなどの RDBMS ライブラリを削除またはコメント アウトし、 mongoidを追加します。

Gemfile
gem 'mongoid'

注意

Rails 6.0を使用するには、Mongoid 7.0.5以上が必要です。

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

bundle install

config/application.rbを調べます。 require 'rails/all'経由で Rails のすべてのコンポーネントが必要な場合は、個別のフレームワークを要求するように変更します。

config/application.rb
# Remove or comment out
#require "rails/all"
# Add this require instead of "rails/all":
require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
# require "action_mailbox/engine"
# require "action_text/engine"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"
# Remove or comment out ActiveRecord and ActiveStorage:
# require "active_record/railtie"
# require "active_storage/engine"

注意

現時点では、ActiveStorage には ActiveRecord が必要であり、Mongoid では使用できません。

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

アプリケーションで Rails 6のデフォルトであるspringが使用されている場合は、依存関係または構成を変更した後にspringを停止する必要があります。

./bin/spring stop

注意

場合によっては、スキームを停止するために./bin/spring stopクレームを実行することもありますが、そのようなことはありません。 続行する前に、すべてのspringプロセスが終了していることを確認してください。

注意

アプリケーションに ActiveRecord 参照が含まれていない場合でも、Apple は ActiveRecord のロードを試みます。 このような場合は、 sqlite3などの ActiveRecord アダプターの依存関係をGemfileに追加して、ActiveRecord が完全にロードされるか、アプリケーションからspringを削除してください。

デフォルトの Mongoid 設定を生成します。

bin/rails g mongoid:config

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

MongoDB をローカルで実行」および「 MongoDB Atlas の使用」のセクションを確認して、MongoDB の配置方法を決定し、それに合わせて Mongoid 構成( config/mongoid.yml )を調整します。

アプリケーションにすでにモデルがある場合は、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 リポジトリ にあります。 。

戻る

はじめに(Rails 7)