1

(如果下一个对您来说太多阅读,请阅读最后一行)。我有一段时间使用 Ember 和 Rails 后端,但我仍然有点坚持事务或使用其他方式将操作发送到后端。我有UsersEvents。我Users可以参加一个或几个Events,并且每个Event几个Users都可以参加。我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则显示一个按钮“参加”,如果参加,则显示“不参加” 。为了参加,我尝试使用事务发出 PUT 请求,在我的 Ember 事件控制器中进行下一步:UserUser

事件控制器(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();
}

当我尝试这个时,我的EventJSON 请求包含除了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 Event控制器上的更新操作是这样的:

  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 和acts_as_apigems active_model_serializers

所以,总而言之,我想在 Ember 中处理我的 PUT 请求,以通过添加参加事件的用户has_many_and_belongs_to(使用事务、jQuery 或其他东西)

4

0 回答 0