Это кажется глупым, но до сих пор все, что я читал, заставляет меня чувствовать, что я делаю это правильно, но он все еще не работает.Rails 4 form_tag подчиняется неправильному действию контроллера
Я использую form_tag для отправки параметров в действие пользовательского контроллера. Вместо действия, которое я указываю, кажется, намерен отправляться на действие show
в моем контроллере, которое мне нужно зарезервировать для профилей. В любом случае вот код (пожалуйста, извините, это не-переработан состояние):
Врачи контроллер:
class DoctorsController < ApplicationController
def new
end
def show
@doctor_list = Doctor.find(params[:id])
end
def index
@doctor_list = Doctor.all
end
def search
end
def results
if params[:zip] && params[:zip].length === 5 && params[:zip]
@doctor_list = Doctor.where("zip = ?", params[:zip])
elsif params[:id]
begin
@doctor_list = []
@doctor_list<<Doctor.find(params[:id])
rescue
flash.now[:errors] = "That doctor does not exist!"
render 'search'
end
else
flash.now[:errors] = "That is not a valid zipcode!"
render 'search'
end
end
end
Маршруты:
resources :users
resources :doctors
root 'doctors#search'
get 'doctors/results' => 'doctors#results'
search.html.erb:
<% provide(:title, "Home") %>
<div class="hero">
<h1>Find an M.D.</h1>
<%= form_tag(doctors_results_path, method: "get") do %>
<%= label_tag("Zipcode: ") %>
<%= text_field_tag(:zip) %><br>
<%= submit_tag "FIND", class: "button"%>
<% end %>
</div>
Опять же, проблема в том, что я получаю сообщение об ошибке (Couldn't find Doctor with 'id'=results
), потому что форма использует мое шоу acti по сравнению с моим действием. Трассировка приложения говорит, что ошибка находится по адресу app/controllers/doctors_controller.rb:6:in 'show'
. Как добавленная путаница, я не действительно понимаю, почему он отправляет "id"=>"results"
как часть хэша params для отправки, но похоже, что это может быть не проблема, если он начнет использовать правильное действие контроллера.
Спасибо за любые мысли.
Попробуйте переместить 'получить«врачей/результаты»=>«врачи # результаты «выше» ресурсов: врачи – Pavan
@ Паван Ух, вот и все. Просто приоритетный вопрос? Поскольку ресурсы: врачи были первыми, он отдавал приоритет этому (и поэтому действие шоу) вместо того, что я ему говорил? – DanielNordby