Rails: маршруты GET и POST для одного и того же пути вызывают ArgumentError - PullRequest
0 голосов
/ 11 марта 2019

Когда я посещаю /contact, я получаю:

ArgumentError (wrong number of arguments (given 1, expected 0)):
app/controllers/contact_controller.rb:6:in `send'

Вот содержимое config/routes.rb:

Rails.application.routes.draw do
  root to: 'home#index'  
  get  'contact', to: 'contact#index'
  post 'contact', to: 'contact#send'
end

Включает ли маршрут для get иpost для того же пути, что get не будет использоваться?ContactController имеет пустые действия для index и send, но index, похоже, игнорируется.

1 Ответ

4 голосов
/ 11 марта 2019

Думаю, проблема в том, что Rails использует Object#send для вызова методов контроллера по имени, но у вас есть свой собственный метод send.В глубине системы маршрутизации Rails он знает, что ему следует направить GET /contact к методу, имя которого - строка 'index';код для этого будет выглядеть примерно так:

controller_instance = an_instance_of_ContactController_from_somewhere
controller_method   = 'index' # This string will be extracted from the `get 'contact', to: '...'` call in routes.rb

controller_instance.send(controller_method)

Вы сможете переименовать свой метод send во что-то другое, обновить свой routes.rb, и все должно быть в порядке;например:

post 'contact', to: 'contact#send_message'

, а затем в contact_controller.rb:

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