2017-09-15 4 views
0

モデル内の特定のフィールドを持つ特定のルートにアクセスしようとしています。IDなしルートページ - 別のフィールドの使い方は?

例: www.myPage.com/wedding/couple1 www.myPage.com/wedding/couple2

私はエンバーのコミュニティユースIDで見つかったすべての例が、私は(別のものを使用しようとしています私はユニークであることを確かめます)。

マイルートの設定:ルートへ

Router.map(function() { 
    this.route('create-wedding'); 
    this.route('weddings'); 
    this.route('wedding', { path: 'wedding/:pageName' }); 
}); 

マイリンク:のレコードを取得する方法を、

model(params) { 
    return this.store.query('wedding', { orderBy: 'pageName', equalTo: params.pageName }); 
} 

しかし:

{{#link-to 'wedding' wedding.pageName}}Access{{/link-to}} 

レコードを取得してください私のルートモデルで特定のパラメータ "pageName"?ユーザーがURLから直接ページにアクセスしたときに同じレコードを取得する方法は?あなたの非idフィールドは、(すなわち、バックエンドに一意性を施行)、本当に本当にユニークである場合は、事前

答えて

0

おかげで、カスタム・シリアライザを書き込むことによって、あなたのフロントエンドIDとして使用することができます。

export default DS.JSONSerializer.extend({ 
    primaryKey: 'other_unique_key' 
}); 

あなたはRESTバックエンドを使用している場合は、単に上記のコードでDS.RESTSerializerためDS.JSONSerializerを入れ替えます。

これにより、IDによるレコード処理のEmberの規則に厳密に従うことができます。カスタムシリアライザhere in the Guidesのオーサリングについて詳しく読むことができます。

もう1つの方法は、クエリパラメータを使用する方法です。その場合、URLはhttp://example.com/weddings?wedding=romeojuliet

のようになります。クエリパラメータについて詳しくは、here in the Guidesをご覧ください。

+0

としてあなたのURLに直接アクセスするようにセットアップされています。シリアライザをRestで構成する方法(私が間違っていない場合、FirebaseはRestを使用します)。 –

+0

簡単に、上のコードをJSONSerializerではなくRESTSerializerに変更します。 https://emberjs.com/api/ember-data/2.14/classes/DS.RESTSerializer/properties/primaryKey?anchor=primaryKey – handlebears

+0

私が変更を加えたとき、私はエラーを受け取りました:アサーション失敗:normalizeResponse有効なJSON APIドキュメントを返す必要があります。 \t *「データ」、「エラー」、「メタ」のいずれかのキーが存在する必要があります。 –

0

詳細はこちらをご覧ください。 https://guides.emberjs.com/v2.15.0/models/finding-records/

この行は、あなたがそれらのparamsを利用するあなたのAPIのセットアップフィルタする必要がありますreturn this.store.query('wedding', { orderBy: 'pageName', equalTo: params.pageName });

を動作させるために。

新しいIDをシリアル化することも、IDの代わりにスラッグを消費するようにAPIを設定することもできます。あなたはこのように直接見つけることができます。 return this.get('store').findRecord('wedding', params.pageParam)

技術的には、単一のレコードの場合はクエリの代わりにqueryRecordを使用する必要があります。

1つのレコードであれば、orderByの目的は何ですか?

And how do I get the same record when the user access the page directly from the URL?

ルータにこれがあるためです。this.route('wedding', { path: 'wedding/:pageName' });

は、あなたはすでに、私は私のデータベースとしてFirebaseを使用していますドメイン名/結婚式/ページ名

関連する問題