67

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

4

3 に答える 3

101

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

ActiveModel : このコンポーネントは Rails 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 について理解できませんでした...どこから聞いたのですか?)

于 2012-10-07T01:54:54.890 に答える
17

私が理解していること:

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

WebService API 経由の ActiveModel = ActiveResource

于 2013-12-13T11:02:58.853 に答える
8

アクティブモデル https://github.com/rails/rails/tree/master/activemodel

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

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


アクティブレコード https://github.com/rails/rails/tree/master/activerecord

レコードはテーブル レコードのように考えてください。

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

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

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

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

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

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


ActiveResource https://github.com/rails/activeresource

リソースは、URL の R や、多くの Rails バックエンドを強化するリソースルーティングのようなものだと考えてください。

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
于 2014-10-10T01:30:40.177 に答える