Ответ 1
Хороший способ писать
resources :items, :collection => {:schedule => :post, :save_scheduling => :put}
является
resources :items do
collection do
post :schedule
put :save_scheduling
end
end
Это создаст URL-адреса, например
-
/items/schedule
-
/items/save_scheduling
Поскольку вы передаете item
в свой метод маршрута schedule_...
, вам скорее всего нужны маршруты member
вместо маршрутов collection
.
resources :items do
member do
post :schedule
put :save_scheduling
end
end
Это создаст URL-адреса, например
-
/items/:id/schedule
-
/items/:id/save_scheduling
Теперь будет доступен метод маршрута schedule_item_path
, принимающий экземпляр item
. Конечная проблема заключается в том, что ваш link_to
в своем роде будет генерировать запрос GET
, а не запрос POST
по мере необходимости вашего маршрута. Вы должны указать это как опцию :method
.
link_to("Title here", schedule_item_path(item), method: :post, ...)
Рекомендуемое чтение: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to