我遇到这个问题,我看到传入的参数嵌套不正确。以下是一些设置:
在routes.config中我定义了:
resources :events do
resources :guests
end
结果我得到了正确的控制器/动作路径。我将在这里指出的那些指定如下:
POST /events/:event_id/guests(.:format) guests#create
这里没有惊喜。现在,在Guest模型中,我与Contact模型建立了关联,以便A Guest属于Contact,而Contact有许多Guest。这工作正常。这里也没什么棘手的。
为此定义的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 => { ......所有的联系参数...... }, ......其他客人参与... }, ......其他有轨的参数...... }
相反,我得到了:
{ :event_id => 1, :contact => { ......所有的联系参数...... }, ......其他客人参数..., ......其他有轨的参数...... }
因为在顶层的params中没有:guest对象,所以这些都不会被标准的Rails创建行为所吸引,我发现自己必须基本上拔出联系人和其他客户参数并将它们手动放入哈希对象。或者我可以提取事件ID和其他Railsy参数并使用params作为一个整体。但是我无法相信这在我之前从未被人看到或解决过,所以我希望有人可以告诉我这个标准方法是什么,或者我在更基础的层面上做错了什么。
提前致谢,如果我遗漏了您需要查看的一些信息或代码,请告诉我......
JD