(如果下一篇文章太多而无法阅读,请阅读最后一行)。我暂时使用Ember和Rails后端,但我仍然有点坚持交易或者用其他方式向后端发送动作。我有Users
和Events
。我的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
在我的模板中,我显示了我的后端中存储的所有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_api
和active_model_serializers
。
因此,总而言之,我想在Ember中仅使用我的PUT请求,通过has_many_and_belongs_to
宏添加参加活动的用户(使用事务,jQuery或其他内容) )