使う機会の多い Application Builder 照会 API の例
Application Builder 照会 API で照会を作成するときには、多くのオプションを使用できます。このトピックでは、よく使うオプションに絞って説明します。
実行する機会が多い照会の例を以下に示します。イタリック体の値は、実際のデータの値で置き換えてください。
- 特定エンティティー・タイプの検索
- 1 つのエンティティー・タイプを検索するには、次の照会を使用します。
entity_types('entity_name')複数のエンティティー・タイプを照会するには、次を使用します。entity_types(['entity_1', 'entity_2'])
- アソシエーションのフォロー
-
アソシエーションをフォローするには、特定のエンティティー・タイプから開始して、定義されたアソシエーションと別名をフォローする必要があります。以下の例では、エンティティー・タイプが user であり、インスタンス thomas のみを照会します。accounts アソシエーションは、user エンティティー・タイプで account エンティティーに対するアソシエーションとして構成されています。contacts アソシエーションは、account エンティティーから一連の contact エンティティーまでの、account エンティティー・タイプのアソシエーション名です。各アソシエーション名はエンティティー・インスタンスのコレクションを返します。このコレクションから、一般的な Ruby の Enumerable メソッドを使用して特定の要素を取得できます。以下の例では、first メソッドを使用してコレクションから最初のエンティティーを取得します。
entity_types('user').where('thomas').first.accounts.first.contacts
- 照会ストリングの指定
- 次の例は、subject.query 変数のコンテンツを持つエンティティー・タイプ user を照会します。
entity_types('user').where(subject.query)注: subject.query 変数は動的照会を表すため、検索ページでのみ役立ちます。これは、次の例では、アプリケーションの現行コンテキストで妥当なもの (例えば、subject.association_name や subject['field_name'].first) によって置き換え可能です。
- フィールドの検索
-
指定の subject.query を含むフィールドを検索するには、次を使用します。
entity_types('user').where(field('full_name').contains(subject.query))照会と完全に一致するフィールド・コンテンツを検索するには、次を使用します。注: is メソッドを使用する場合は、フィールド full_name に対して高速索引付けを行う必要があります。entity_types('user').where(field('full_name').is(subject.query))フィールドが存在する場合に検索するには、次を使用します。
entity_types('user').where(field('phone_number')).where(subject.query)
- ソートの指定
-
ソート基準のフィールドを指定するには、次を使用します。
entity_types('user').sorted_by(field('full_name').in_descending_order)ソートに XPath を使用するには、次を使用します。
注: XPaths は、コレクション・ストアおよびクラスター・コレクション・ストアから作成されたエンティティーを照会する場合にのみ有効です。entity_types('account').sorted_by(xpath('string-length($af.title)').in_ascending_order)
- 返される結果の件数の指定
-
デフォルトでは、Application Builder は照会ごとに結果 10 件を要求します。照会で要求される結果の件数を指定するには、次を使用します。
entity_types('user').requesting(20)
- 結果ごとに返されるフィールドの制限
-
デフォルトでは、Application Builder は照会で返されるエンティティーごとにすべてのフィールドを取得します。特定のフィールドを選択すると、エンティティーに多数のフィールドがある場合や不要な大規模フィールド・コンテンツがある場合に役立ちます。
エンティティーの特定のフィールドを返すには、次を使用します。
entity_types('account').selecting_fields(['title', 'status', 'start_date'])関連付けられたエンティティーの特定のフィールドを返すには、次を使用します。
subject.association_name.where(field('field_name')).selecting_fields(['name'])
- HTML の strong タグによるテキストの強調
- 以下のコードは、entity1 エンティティー・タイプの返されたインスタンスに存在するテキスト some_text に strong タグを追加します。
entity_type("entity1").where("some_text").bold
- 検索結果による抜粋の生成
- 以下のコードは、snippet フィールドを追加し、entity1 エンティティー・タイプの返されたインスタンスに存在するテキストからの抜粋を格納します。snippet フィールドを生成した後は、フィールド名 snippet を使用してエンティティーから snippet テキストを取得できます。
entity_type("entity1").generate_snippets
- 重複する結果の削除
- 以下のコードは、entity1 エンティティー・タイプを対象に返されたエンティティー・インスタンスのうち、重複するものを削除します。
entity_type("entity1").filter_duplicates
- length ワードのスパンが存在することの要求
- 以下のコードは、結果の長さが 5 ワード以上であることを要求します。
.where(words(5))以下のコードは、結果の field_name フィールドの長さが 5 ワード以上であることを要求します。.where(field("field_name").containing(words(5)))
- 正規表現がエンティティーのテキストに一致することの要求
- 以下のコードは、エンティティーのテキストが mat と 1 文字以上の後続文字 (match、math、mattias など) に一致することを要求します。正規表現では、ピリオド (.) はワイルドカード文字であり、正符号 (+) は 1 文字以上の後続文字が一致しなければならないことを意味します。この例の場合、mat は一致しません。
.where(regex("mat.+"))
- エンティティー・フィールドに格納された HTML の使用
- 大括弧 [] を使用してフィールド名にアクセスすると (subject["field_name"] など)、返されるフィールドの配列からタグと余分な空白文字がすべて取り除かれます。そのため、例えば HTML を保持するフィールドがある場合に Application Builder の表示でその HTML を解釈したいときは、大括弧を使用してそのフィールドの値にアクセスしてはなりません。代わりに、フィールドの値を取得するために構文 subject.field_value("field_name").text_value を使用してください。
例えば、エンティティーの html_content というフィールドに HTML コンテンツが保持されている場合は、以下の ERB コードを使用して、カスタム・ウィジェットでその HTML コンテンツをレンダリングできます。
<%= raw subject.field_value("html_content").text_value %>注: 上の例では raw 関数が使用されて、エスケープされていない HTML が返されます。raw 関数がない場合、エスケープされた HTML が返されます。