2011-01-10 3 views
4

Я создал обычное действие RESTful под названием «post». Он появляется в TransactionsController как (общедоступный) метод, называемый post.Проблема маршрутизации в Rails 3: ActionController :: RoutingError (Нет совпадений маршрутов ...)

resources :transactions do 
    member :post do 
    post :post 
    end 
end 

У меня есть форма настроен следующим образом:

<form action="/transactions/25/post"> 
    ... 
    <input id="transaction_submit" commit="commit" type="submit" value="Post"> 
</form> 

Когда я нажал на кнопку "Отправить", мой сервер получает:

POST "/transactions/25/post" 

Я ожидаю, что это называют «post» в моем TransactionController, но вместо этого я получаю ошибку маршрутизации

ActionController::RoutingError (No route matches "/transactions/25/post"): 

Любые идеи? Благодарю.

Джеймс

+0

Я полагаю, вы имеете в виду 'член do' ... не' член: пост do', верно? во всяком случае, имея ту же проблему, забавно, что «get: xyz», похоже, работает. – lwe

+0

Вы правы. Я должен был скопировать и вставить. –

ответ

8

, наконец, нашел решение, проблема заключается в том, что form_for добавляет скрытое _method поле со значением "put", потому что хорошо сделка уже существует, чтобы обойти эту проблему, я должен был сделать следующее:

<%= form_for @transaction, :url => post_transaction_path(@transaction), :html => { :method => :post } do |form| %> 

по крайней мере, решить этот вопрос для меня, см https://rails.lighthouseapp.com/projects/8994/tickets/4884-routing-error-for-restful-resource-under-namespace для дальнейшего использования

+0

Большое спасибо! Я действительно использую этот метод RESTful для изменения существующей записи, поэтому я заставил ее работать с запросом «put». Уф! задача решена! –

+0

Ты гений! –

+0

@James Roscoe: Это помогло мне решить касательную проблему. Rails не нашел пользовательский маршрут REST. Ваш образец показал мне, что мне нужно передать переменную экземпляра методу маршрута * _path для запроса PUT. Огромное спасибо. – Brian

Смежные вопросы