ActiveRecordで負荷を取る

2778 ワード

ActiveRecordはアプリケーションへのRailsのORM層Rubyの供給です.最も簡単に言えば、ActiveRecordはMVCの' m 'です.モデルはアプリケーションのロジックを表現するシステムです.ActiveRecordは私たちにデータベースクエリコマンドを書くのに費やされることができる多くの時間を節約します、SQLite、Postgres、MySQLを考えてください.
ActiveRecordデータベースのデータとクラスの各行を作るデータベースにテーブルをマップし、すべてのデータベースのクエリを簡単、きちんとした迅速(ORM)になります.
データベーステーブルに行を追加し、SQLクエリを使用してテーブルの行またはインスタンスを見つけることの違いを見てみましょう.
INSERT INTO Users (name)
VALUES ("Joe Everyone")

SELECT * FROM Users
WHERE name="Joe Everyone"
とActiveRecord :
User.create(name: "Joe Everyone")
User.find_by(name: "Joe Everyone")
これはあまりにも多くの時間を節約していませんが、ユーザークラス、名前、DOB、場所のインスタンスについて、より多くのパラメータを持っているときに何が起こるのでしょうか?
本当の魔法は、我々が関係とモデルの間の関連に入るとき起こります.
ユーザモデルと移行表:
class User < ActiveRecord::Base
  has_many :posts
end

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.string :avatar_url
      t.integer :post_ids
    end
  end
end
これらのユーザがブログであるとしましょうので、ポストクラスと移行表も作成します.
class Post < ActiveRecord::Base
  belongs_to :user
end

class CreatePosts < ActiveRecord::Migration[5.2]
  def change
    create_table :posts do |t|
      t.string :title
      t.text :content
      t.date :post_date
      t.integer :user_id
    end
  end
end
これらのテーブルの書き方はSQLクエリーのようになります.
CREATE TABLE User
(
Pk_User_Id INT PRIMARY KEY,
Name VARCHAR(20),
Email VARCHAR(20),
Avatar_Url VARCHAR(20)
);

CREATE TABLE Post
(
Pk_Post_Id INT PRIMARY KEY
Title VARCHAR(50),
Content TEXT,
Post_date DATE,
Fk_User_Id INT FOREIGN KEY REFERENCES User(Pk_User_Id)
);
SQL側でいくつかの重い持ち上げのように見え始める.さて、私たちは、特定のユーザーからのすべてのポストを見たいと言いましょう
SQLでは、内部結合を書く必要があります.
SELECT *
FROM Users
INNER JOIN Posts
WHERE User.Pk_User_Id = Post.Fk_User_id
ActiveRecordでは、非常に簡単に書くことができます.
user = User.find_by(id: params[:id])
user.posts
我々はより多くのモデルとの関係を追加起動すると、これはますます複雑になる.
また、ActiveRecordは自動的にcrud動詞を使用して簡単で直感的な方法を作成します.ActiveRecordを使用して、インスタンスがデータベースに永続化される前にモデルを検証できます.我々は、2つのユーザーが同じメールアドレス、またはコンテンツを持ってポストを持っていないだろう!
ActiveRecordだけでなく、強力なツールが、かなり楽しい使用することです!ハッピー永続!
Ales MeUnsplashによる写真