入力パラメーターが正しくネストされていないという問題があります。セットアップの一部を次に示します。
routes.config で、次のように定義しました。
resources :events do
resources :guests
end
その結果、正しいコントローラー/アクション パスが得られます。ここで呼び出すものは、次のように指定されています。
POST /events/:event_id/guests(.:format) guests#create
ここで驚くことはありません。現在、Guest モデルでは、Guest が Contact に属し、Contact が多くの Guest を持つ Contact モデルと関連付けられています。これは正しく動作します。ここでもトリッキーなことは何もありません。
このための backbone.js モデルは次のように定義されています。
define('GuestModel', [
'underscore',
'backbone'
], function(_, Backbone) {
var Guest = Backbone.Model.extend({
idAttribute: "id",
url: function() {
return '/events/' + this.get('event_id') + '/guests';
}
});
return Guest;
});
これに対する簡単な注意点: 私はフロントエンドのバックエンド API サポートを提供していますが、フロントエンドを (私の直接のクライアントとして) 実装している人は、Rails アセット パイプラインをまったく使用していません。私はこれを制御することはできず、結果として、これは私が実際に影響を与えることができないコードのビットです。
問題は、GuestsController#create メソッドで、次のようなパラメーターが表示されることを期待していることです。
{ :event_id => 1, :guest => { :contact => { ...すべての連絡先パラメーター... }, ...その他のゲストパラメーター... }, ...その他のRailsyパラメーター... }
代わりに私は得ています:
{ :event_id => 1, :contact => { ...すべての連絡先パラメータ... }, ...その他のゲスト パラメータ..., ...その他のRailsyパラメータ... }
最上位の params には :guest オブジェクトがないため、Rails の標準の create 動作ではこれが検出されず、基本的に連絡先やその他のゲスト パラメータを取り出して手動でハッシュ オブジェクトに配置する必要があります。または、イベント ID と他の Railsy パラメーターを取り出して、パラメーター全体を使用することもできます。しかし、これが私の前に誰かによって見られたり対処されたりしたことがないなんて信じられないので、誰かがこれに対する標準的なアプローチが何であるか、または私がより根本的なレベルで間違っていることを教えてくれることを願っています.
事前に感謝します。確認する必要がある情報やコードを省略した場合はお知らせください...
jd