1

特定のコンテキストでモデルの必要なフィールドのみを取得する方法が見つかりません。約 30 のフィールド (プロパティ) を持つ巨大なモデルがあるとします。しかし、検索目的のために、私はそれらのうちのいくつかだけが必要です.

例:

class Foo
  include DataMapper::Resource

  property :id, Serial
  property :title, String, :length => 256
  property :description, Text
  property :url, String, :length => 4096
  property :city, String, :length => 64
  property :country, String, :length => 64
  property :state, String, :length => 64
  property :created_at, Time
  property :updated_at, Time
  property :expires_at, Time
  ... etc fields ...
end

したがって、フロントエンド (Web アプリケーション) では、そのフィールドのほとんどが使用されます。しかし、検索の場合は、:title、:city、:state だけを言う必要があります。そのようなデータのクエリは簡単です

items = Foo.all(:title.like => 'Some stuff')

そして、取得したデータを JSON にパックする必要があります。私の知る限り、すべての操作を処理する dm-serialize と呼ばれる DataMapper のモジュールがあります。

最後に、出力用のパッケージを作成します。

response = {:error => 0, :count => items.length, :data => items}
response.to_json

しかし、出力項目にはすべてのフィールドがありますが、それらの一部のみを取得する必要があります。何らかの理由で遅延読み込みが機能しません。

問題は、選択するモデル フィールドをどのように指定するかということです。

4

2 に答える 2

7
Foo.all(:fields=>[:title, :city, :state])
于 2009-12-27T21:20:22.230 に答える
4

これにもつまずいた。
また、メソッドに:onlyオプションを提供します#to_json。そうしないと、まだフェッチされていないものを遅延ロードします。

items.to_json(:only => [:title, :city, :state])

json応答を自分で作成する必要があります。そうしないと、他のフィールドの遅延フェッチが発生します。

于 2012-02-20T10:32:05.100 に答える