2013-09-22 3 views
0

Редактирование файла route.rb моего Rails 4, и я получаю неожиданное поведение (в любом случае, неожиданная форма - моя точка зрения).Rails routes.rb Неожиданное поведение

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

<%= link_to "Withdraw this booking", bookings_withdraw_path(@booking), :confirm => "Are you sure you want to withdraw this booking?", :method => :patch %> 

Моя проблема возникает, когда я пытаюсь настроить маршрут для этой ссылки. Если добавить следующую строку в моих маршрутах файл:

match 'bookings/withdraw/:bid' => 'bookings#withdraw', via: 'patch' 

тогда, когда я запускаю команду грабель, чтобы проверить маршруты он показывает это:

bookings_withdrawn GET /bookings/withdrawn(.:format)   bookings#withdrawn 
        PATCH /bookings/withdraw/:bid(.:format)  bookings#withdraw 

Как вы можете видеть, ВЫВЕСТИ путем является частью (выше) (Кстати, между прочим). Если я удалю часть /: bid из пути, то он создаст собственный путь, который я ожидаю.

Может кто-нибудь объяснить, почему это происходит?

+1

Теперь я не могу найти его ни в каком источнике, но я уверен, что динамические маршруты по умолчанию не называются, вы должны указать его явно, добавив 'as: 'bookings_withdraw'' (в этом случае) так что это ожидаемое поведение. – zrl3dx

+0

Это все - спасибо. Я этого не понимал. Спасибо, много! – tommyd456

+0

Если вы хотите добавить это в качестве ответа, я отметю вам, что это правильно. – tommyd456

ответ

0

Как я уже писал в комментариях, вы должны добавить :as на ваш маршрут, то есть:

match 'bookings/withdraw/:bid' => 'bookings#withdraw', via: 'patch', as: 'bookings_withdraw' 

Именованный маршрут, вероятно, не был автогенерирован из-за динамической части :bid, AFAIK Rails не генерируют неявно названные маршруты в таких случаях, поэтому вы должны добавить их явно, но я все еще не могу найти его в документах, возможно если кто-то есть и может поделиться, поэтому я обновляю свой ответ.

1

попробовать это

в вас маршруты файл передать блок в resources :bookings как этот

resources :bookings do 
    member do 
     patch :withdraw 
    end 
    end 

и удалить этот

match 'bookings/withdraw/:bid' => 'bookings#withdraw', via: 'patch' 
Смежные вопросы