はじめに(Rails 6)
項目一覧
注意
このチュートリアルは 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 ジェネレーターを使用してアプリケーションのスケルトンを作成します。そのためには、まず 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 リポジトリを作成することをお勧めします。
git init . git add . git commit
このチュートリアルに従い、変更をコミットします。
Mongoid を追加する
1 。 を変更してGemfile
mongoid への参照を追加します gem:
gem 'mongoid'
注意
Rails 6.0を使用するには、Mongoid 7.0.5以上が必要です。
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
その他の Rail 依存関係
これが最初に作成する 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
関連付けを追加します。
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
に変更します。
class Comment include Mongoid::Document field :name, type: String field :message, type: String belongs_to :post 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>
コメント フォーム ファイルを開き、 :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/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 を使用するように切り替えるには、次の手順に従います。
Dependencies
Gemfile
に記載されているsqlite
、 pg
などの RDBMS ライブラリを削除またはコメント アウトし、 mongoid
を追加します。
gem 'mongoid'
注意
Rails 6.0を使用するには、Mongoid 7.0.5以上が必要です。
gem の依存関係をインストールします。
bundle install
ロードされたフレームワーク
config/application.rb
を調べます。 require 'rails/all'
経由で Rails のすべてのコンポーネントが必要な場合は、個別のフレームワークを要求するように変更します。
# 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 では使用できません。
ActiveRecord の構成
すべての構成ファイル(config/application.rb
、config/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 の構成
デフォルトの 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 モデルは次のようになります。
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 リポジトリ にあります。 。