Как правильно RESTful-то «любить» что-то в Rails 3? - PullRequest
2 голосов
/ 09 февраля 2011

Допустим, у меня есть приложение 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",
        ....
    });
} );

контроллер рельсов

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

Эта логика кажется правильной?Я делаю POST через AJAX.Технически, я не должен делать PUT?Или я слишком требователен к этому?

Кроме того, мой контроллер использует нестандартные глаголы.Как video и game.Должен ли я беспокоиться об этом?Иногда я путаюсь в том, как сопоставить «правильные» глаголы.

Альтернативой может быть публикация чего-то вроде /likes/:id со структурой данных, содержащей тип (игра или видео).Тогда я мог бы обернуть это одним глаголом в контроллере ... может быть, даже обновить (PUT).

Любые предложения будут оценены.

1 Ответ

2 голосов
/ 09 февраля 2011

Rest архитектурный стиль не определяет, какой "глагол" вы должны использовать для чего. Он просто говорит, что можно использовать HTTP, если они хотят для соединителей.

То, что вы ищете, это HTTP спецификации для определений методов . В частности, POST предназначен для:

  - 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.

в то время как PUT:

запрашивает, чтобы вложенный объект был сохранен под предоставленным Request-URI. Если Request-URI ссылается на уже существующий ресурс, вложенный объект СЛЕДУЕТ рассматривать как измененную версию того, который находится на исходном сервере.

К какой категории относится ваша функциональность, зависит от вас - если вы согласны с этим сами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...