2012-05-07 2 views
0

Мое приложение - планировщик тренировок.Rails Маршрутизация и HTTP-глаголы

Клиент обычно выполняет тренировки на одном из трех временных интервалов в определенный день, поэтому я предоставляю функцию быстрого добавления, чтобы запланировать утреннюю, дневную или вечернюю тренировку.

У меня работает код, но я не думаю, что я делаю это правильно.

Мой маршрут выглядит следующим образом:

match 'workouts/quick_add/:date/:timeslot' => "workouts#quick_add", 
    :as => 'workout_quick_add' 

, который я использую через что-то вроде этого:

<%= link_to 'Morning Workout', workout_quick_add_path(:date => day, :timeslot => 'morning') %> 

Теперь, это работает, если запрос приходит через GET, но это не кажется правильным на основе определений метода протокола HTTP. Кажется, что POST или PUT были бы правы, но если я добавлю :via => :post или :put к маршруту, все это будет искажено ошибкой маршрутизации.

Что здесь правильно, и каков правильный способ реализации такого рода функций?

ответ

2

Как насчет:

resources :workouts do 
    collection do 
    post :quick_add 
    end 
end 

и передать дату и временной интервал в Params.

+0

Да, я получаю ошибки при маршрутизации при выполнении этого. Нет совпадений маршрута: action => quick_add,: controller => workouts,: date => 2012-05-06,: timeslot => утро. Это при использовании quick_add_workout_path (: date => day,: timeslot => 'morning') – DVG

+1

aha! Я сделал маршрут сбора и обновил link_to, чтобы использовать ': method =>: post', и теперь все работает так, как я этого хотел. Благодаря!. Если вы отредактируете свой ответ для 'collection do', я отвечу и приму ваш ответ :) – DVG

+0

Ах, коллекция, конечно. Вы имеете дело с созданием, а не с обновлением. Спасибо за исправление и upvote. Приветствия. –