0

我遇到了这个问题,我看到传入的参数嵌套不正确。这是一些设置:

在 routes.config 我定义了:

resources :events do
  resources :guests
end

结果,我最终得到了正确的控制器/动作路径。我将在这里调用的是这样指定的:

POST   /events/:event_id/guests(.:format)                guests#create

这里没有惊喜。现在在来宾模型中,我与联系人模型建立了关联,因此来宾属于一个联系人,一个联系人有很多来宾。这可以正常工作。这里也没有什么棘手的。

对此的主干.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 资产管道。我无法控制这一点,因此这是我无法真正影响的代码,而无需首先说服他这是要走的路。

问题是,在 GuestController#create 方法中,我希望看到如下所示的参数:

{ :event_id => 1, :guest => { :contact => { ...所有联系参数... }, ...其他访客参数... }, ...其他 railsy 参数... }

相反,我得到:

{ :event_id => 1, :contact => { ...所有联系参数... }, ...其他访客参数..., ...其他 railsy 参数... }

因为在顶层的 params 中没有 :guest 对象,标准 Rails create 行为都没有处理这些,我发现自己基本上必须拉出联系人和其他来宾参数并手动将它们放入哈希对象中。或者我可以提取事件 id 和其他 Railsy 参数并将这些参数作为一个整体使用。但我不敢相信在我之前的人从未见过或解决过这个问题,所以我希望有人能告诉我解决这个问题的标准方法是什么,或者我在更基本的层面上做错了什么。

提前致谢,如果我遗漏了一些您需要查看的信息或代码,请告诉我...

京东

4

0 回答 0