2015-07-25 7 views
0

Это кажется глупым, но до сих пор все, что я читал, заставляет меня чувствовать, что я делаю это правильно, но он все еще не работает.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 для отправки, но похоже, что это может быть не проблема, если он начнет использовать правильное действие контроллера.

Спасибо за любые мысли.

+1

Попробуйте переместить 'получить«врачей/результаты»=>«врачи # результаты «выше» ресурсов: врачи – Pavan

+0

@ Паван Ух, вот и все. Просто приоритетный вопрос? Поскольку ресурсы: врачи были первыми, он отдавал приоритет этому (и поэтому действие шоу) вместо того, что я ему говорил? – DanielNordby

ответ

2

Да, это вопрос приоритета. Поскольку resources :doctors является первым, то GET show будет дан приоритет, чем get 'doctors/results' => 'doctors#results'

Перемещение получить 'doctors/results' => 'doctors#results' выше resources :doctors должно решить вашу проблему

#routes.rb 
root 'doctors#search' 
get 'doctors/results' => 'doctors#results' 

resources :users 
resources :doctors 

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

  • Нет связанных вопросов^_^