Как лучше всего представить методы Rails через API? - PullRequest
2 голосов
/ 13 ноября 2009

Допустим, у меня есть модель foo, а у моей модели есть публикация! метод, который изменяет несколько свойств этой модели и, возможно, несколько других.

Теперь способ Rails предлагает мне выставить мою модель поверх остальных и позволить конечному пользователю обезьяна с параметрами.

Что мне делать, если я хочу опубликовать мою публикацию! способ вместо того, чтобы защитить мою модель? Это даже лучший способ посмотреть на это?

Ответы [ 2 ]

4 голосов
/ 13 ноября 2009

Поскольку вы пытаетесь сделать это способом REST, сначала вам нужно найти ресурс - кое-что, что вы можете запросить с помощью одного из глаголов HTTP.

Я бы сказал, что «вещь», которую мы должны здесь идентифицировать, это статус foo . Переведено в URL:

/foos/:id/status

Состояние конкретного foo является ресурсом - и это первое, что нам нужно, когда мы пытаемся быть REST-совместимым. Когда мы публикуем некоторые foo, это означает, что мы меняем (обновляем) их статус, верно? Итак, что нам нужно сделать дальше, это создать маршрут и метод, который будет обрабатывать запрос «update status of foo».

Чтобы сделать это, просто добавьте это в ваш файл route.rb:

map.connect "/foos/:id/status", :controller => "foos", :action => "change_status", :conditions => { :methods =>  :put }

и добавьте что-то подобное в ваш файл контроллера foos:

# simplified
def change_status
  status_name = params[:status_name]
  foo = Foo.find(params[:id])
  foo.publish! if status_name == "published"
end

Таким образом, вы получите вполне приличный дизайн RESTful.

0 голосов
/ 13 ноября 2009

Вы добавили бы метод к своему FooController, который вызвал метод publish!.

Пример:

в config / rout.rb:

map.publish_foo "/foos/:id/publish/:bar", :controller => "foo", :action => "publish"

в приложении / controllers / foo_controller.rb

def publish
    @foo = Foo.find params[:id]
    @foo.publish!(params[:bar])
    flash[:notice] = "Your Foo has been published."
    redirect_to @foo
end

Конечно, вам, вероятно, нужна обработка ошибок.

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