使用JSON的Ember PUT请求给出了一个奇怪的错误

时间:2013-10-04 10:59:34

标签: ruby-on-rails json ember.js transactions put

(如果下一篇文章太多而无法阅读,请阅读最后一行)。我暂时使用Ember和Rails后端,但我仍然有点坚持交易或者用其他方式向后端发送动作。我有UsersEvents。我的Users可以参与一个或多个Events,而EventUsers可以参加。has_and_belongs_to_many。我正在以这种方式使用Mongoid宏# ... has_and_belongs_to_many :attendings, class_name: "User" , inverse_of: :attendances # ... 维持这种关系:

事件

# ...
has_and_belongs_to_many :attendances, class_name: "Event" , inverse_of: :attendings
# ...

用户

Events

在我的模板中,我显示了我的后端中存储的所有User的列表,以及User尚未参加的“参加”按钮,以及“不参加”{ {1}}正在参加。为了参加,我试图使用事务发出PUT请求,在我的Ember事件控制器中进行下一步:

使用交易的事件控制器(Ember),actionAttending方法:

actionAttending: function() {
    var userId = this.get('controllers.app.model.id');

    this.transaction = this.get('store').transaction();

    this.get('attendings').pushObject(App.User.find(userId));

    this.transaction.add(this.get('model'));
    this.transaction.commit();
}

当我尝试这个时,我的Event JSON请求包含所有参数和关系,但attendings属性。所以我决定尝试使用jQuery请求:

事件控制器(Ember),使用jQuery ajax的actionAttending方法:

// ...

var eId = this.get('id');
this.get('attendings').pushObject(App.User.find(userId));
var eAttendings = this.get('attendings');

var url = "/events/" + eId + ".json";

var data = { event: { id: eId, attendings: eAttendings } };

$.ajax({
  type: "PUT",
  url: url,
  data: data,
  dataType: "JSON"
});
// ...

嗯,除了我声明eAttendings的行之外,这是非常有效的,其中Ember抱怨init函数没有被调用,或者类似于某些东西。谷歌搜索了一下之后我找到了一个“解决方案”,它被转换为数组,所以这一行改变了这样:

var eAttendings = this.get('attendings').toArray();

我现在的错误是:

TypeError: fullName is undefined
var nameParts = fullName.split(":"),

在我的ajax请求启动之前,这是在Firebug中引发的。我不知道究竟是什么意思或如何解决它......

无论如何,我想试试我的ajax请求是否有效,所以我在curl中试了一下:

curl --request PUT localhost:3000/events/521b97ef5ef9095ba211bf70 --data "id=521b97ef5ef9095ba211bf70&attendings=521b7eda99027121d1533015"

答案是:

{"errors":{"attendings":["is invalid"]}}

而且bakend正在返回一个422 Unproccesable entity答案...我在这个领域的模型上没有验证,所以我不知道这里发生了什么...我对Rails的更新操作事件控制器是这样的:

  def update
    e = Event.find(params[:id])
    u = User.find(params[:attendings])

    if params[:attendings]
      e.attendings << u
      e.save
      respond_with e, api_template: :general_event, status: :no_content
    end   end

最后一个细节:我在Rails中使用Ember 1.0.0.rc6,jQuery 1.10.2以及gems acts_as_apiactive_model_serializers

因此,总而言之,我想在Ember中仅使用我的PUT请求,通过has_many_and_belongs_to添加参加活动的用户(使用事务,jQuery或其他内容) )

0 个答案:

没有答案