Backbone JS和Ruby on Rails CRUD问题

时间:2012-05-11 21:49:19

标签: ruby ruby-on-rails-3 backbone.js

这对我来说似乎是一个问题。正常方式Backbone工作正在使用相同的URL和GET,POST,PUT和DELETE。但很明显:

1)除了POST方法之外的所有方法都需要URL或请求正文中的ID

2)DELETE请求不能包含正文或某些服务器忽略正文

那么你怎么能让我们说Ruby on Rails服务器应用程序成功地使用Backbone而不需要破解Backbone,例如model.destroy()需要在URL中拥有ID?而且,正如我们的RoR开发人员告诉我的那样,为PUT做路由的正常方法是在URL中也有一个ID?

2 个答案:

答案 0 :(得分:2)

您需要实现5条路线才能使用骨干网的默认sync行为。对于资源user,它们是:

GET /user/        // Get a list of users
GET /user/:id     // Get a single users by id
POST /user/       // Create a new user
PUT /user/:id     // Update an existing user by id
DELETE /user/:id  // Delete an existing user by id

我对Ruby on Rails不是很熟悉,但是看看他们的文档,你可以用以下的方式来实现这个规范:

match "/user/" => "users#all", :via => :get
match "/user/:user_id" => "users#one", :via => :get
match "/user/" => "users#create", :via => :post
match "/user/:user_id" => "users#update", :via => :put
match "/user/:user_id" => "users#delete", :via => :delete

答案 1 :(得分:1)

您不应该破解Backbone以使其与RoR一起使用。 Backbone很聪明,可以(在某种程度上)知道它应该使用什么URL和方法。

例如,对于模型的初始提取,如果将url设置为'/ tasks',它将对'/ tasks / id'执行GET请求。当您更改该模型并调用model.save时,它将对'/ tasks / id'执行PUT请求。当你调用model.destroy时,它会发送一个DELETE请求(空体)

您必须考虑的一件事是CSRF令牌。我建议你在Gemfile中包含backbone-rails。它包括一些JavaScripts来帮助Rails / Backbone集成。