web-dev-qa-db-ja.com

アクティブモデル、アクティブレコード、アクティブリソースの違い

アクティブモデル、アクティブレコード、アクティブリソースの正確な違いを定義することで私を助けてくれる人はいますか?私は正確な違いを見つけるために十分なグーグルを行いましたが、それらの間の正確な違いを知ることができる具体的なものは何もありませんでした。今のところ、それらはすべて私には同じに見えます。ですから、具体的なポイントを付けて適切な答えを出してください。

52
Arif Usman

Rails 3はモジュール性を考慮して設計されています。各モジュールには独自の目的と機能があります。

ActiveModel:このコンポーネントはRails 3.で作成されました。3つは、データベースを持たないモデル関連のすべての部品を取得しましたRails 2 ActiveRecordの要件とそれをActiveModelに移動しました。ActiveModelには検証などが含まれます。詳細: http://www.rubyinside.com/Rails-3-0s- activemodel-how-to-give-Ruby-classes-some-activerecord-magic-2937.html

ActiveRecord:これは、クラスをデータベースに関連付けるコンポーネントです。これにより、データベースからレコードを簡単にプルできるメソッドなどのクラス機能が提供されます(たとえば、findメソッド)。

ActiveResource:ActiveRecordに似ています。ただし、データベースによってサポートされるのではなく、ActiveResourceオブジェクトは、WebサービスAPIを介して別のアプリケーションによってサポートされます。詳細: http://ofps.oreilly.com/titles/9780596521424/activeresource_id59243.html

(ActiveBaseについて理解できませんでした...どこから聞いたのですか?)

79
richardaday

私が理解していること:

ActiveModel +データベースサポート= ActiveRecord

WebService APIを介したActiveModel = AcitveResource

11
Pengyu Zhao

ActiveModelhttps://github.com/Rails/rails/tree/master/activemodel

スーパーモデルが常に検証を必要としていると考えてください。

ActiveModelは多くの目的に使用できますが、ほとんどの場合、モデル/データベースレコードに検証サポートを追加することで認識されています。


ActiveRecordhttps://github.com/Rails/rails/tree/master/activerecord

recordをテーブルレコードのように考えます。

新しいクラスとデータベース内の既存のテーブルとの間のマッピングを設定します。

アプリのコンテキストでは、これらのクラスは一般にモデルと呼ばれます。モデルは他のモデルに接続することもできます。これは関連を定義することによって行われます。

  class Firm < ActiveRecord::Base
    has_many   :clients
    has_one    :account
    belongs_to :conglomerate
  end

バックグラウンドで、Railsは、スキーマ管理およびレコードのプロパティの定義にActiveRecordを使用し、ORM(オブジェクトリレーショナルマッパー)として機能します):

ORM:データベーステーブルまたはビューの行をラップし、データベースアクセスをカプセル化し、そのデータにドメインロジックを追加するオブジェクト。」

スキーマは、レコードのプロパティの概要を示します。


ActiveResourcehttps://github.com/Rails/activeresource

resourceをURLのRのように、またはresource routingのように考えて、多くのRailsバックエンド。

[〜#〜] c [〜#〜]reate、[〜#〜のようなことができます] r [〜#〜]etrieve、[〜#〜] u [〜#〜]pdate、または[〜#〜] d [〜#〜]破棄(HTTP経由のCRUD)。

  tyler = Person.find(1) 

リソースルートに対してリクエストが行われると、RESTfulリクエストは対応するHTTP動詞とそのデータベースの相互作用を自分自身にマッピングします

  GET    => Person.find(1)
  POST   => Person.new(:name => 'Tyler', :favorite_page => 'stackoverflow') 
  PUT    => tyler.save
  DELETE => tyler.destroy
7
lfender6445