假设我有一个显示视频的Rails 3应用。用户可以“喜欢”或“不喜欢”视频。此外,他们可以喜欢/不喜欢游戏等其他内容。我需要在整体设计方面提供一些帮助,以及如何处理RESTful路由。
目前,我有Like Class
使用多态设计,以便对象“可爱”(likeable_id,likeable_type)
我想通过AJAX(jQuery 1.5)来做这件事。所以我想的是:
的javascript
// these are toggle buttons
$("likeVideo").click( function() {
$.ajax({
url: "/likes/video/" + video_id,
method: "POST",
....
});
} );
$("likeGame").click( function() {
$.ajax({
url: "/likes/game/" + game_id,
method: "POST",
....
});
} );
rails controller
Class Likes < ApplicationController
def video
# so that if you liked it before, you now DON'T LIKE it so change to -1
# or if you DIDN'T like it before, you now LIKE IT so change to 1
# do a "find_or_create_by..." and return JSON
# the JSON returned will notify JS if you now like or dislike so that the
# button can be changed to match
end
def game
# same logic as above
end
end
路线
match "/likes/video/:id" => "likes#video", :as => :likes_video
match "/likes/game/:id" => "likes#game", :as => :likes_game
这个逻辑看起来是否正确?我正在通过AJAX进行POST。从技术上讲,我不应该做一个PUT吗?或者我对此过于挑剔?
另外,我的控制器使用非标准动词。与video
和game
一样。我应该担心吗?有时我会对如何匹配“正确”的动词感到困惑。
另一种方法是使用包含类型(游戏或视频)的数据结构发布到/likes/:id
之类的内容。然后我可以将它包装在控制器中的一个动词中......甚至可以更新(PUT)。
任何建议都将不胜感激。
答案 0 :(得分:2)
Rest architectural style未指定您应该使用哪个“动词”。它只是说如果他们想要连接器就可以使用HTTP。
您要找的是HTTP specifications for method definitions。特别是POST适用于:
PUT:- Annotation of existing resources; - Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; - Providing a block of data, such as the result of submitting a form, to a data-handling process; - Extending a database through an append operation.
请求将所包含的实体存储在提供的Request-URI下。如果Request-URI引用已存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本。
您的功能属于哪个类别取决于您 - 只要您与自己保持一致。