Rails 4 form_tag 提交错误的控制器操作
Rails 4 form_tag submitting to wrong controller action
这感觉很愚蠢,但到目前为止我读过的所有内容都让我觉得我做对了,但它仍然不起作用。
我正在使用 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
),因为表单使用的是我的显示操作与我的结果操作。应用程序跟踪表明错误位于 app/controllers/doctors_controller.rb:6:in 'show'
。更让人困惑的是,我 真的 不明白为什么它在提交时将 "id"=>"results"
作为参数散列的一部分发送,但如果它会使用正确的控制器动作开始。
感谢任何想法。
是的,这是一个优先问题。由于 resources :doctors
在前,因此 GET show
将优先于 get 'doctors/results' => 'doctors#results'
将 get 'doctors/results' => 'doctors#results'
移动到 resources :doctors
上方应该可以解决您的问题
#routes.rb
root 'doctors#search'
get 'doctors/results' => 'doctors#results'
resources :users
resources :doctors
这感觉很愚蠢,但到目前为止我读过的所有内容都让我觉得我做对了,但它仍然不起作用。
我正在使用 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
),因为表单使用的是我的显示操作与我的结果操作。应用程序跟踪表明错误位于 app/controllers/doctors_controller.rb:6:in 'show'
。更让人困惑的是,我 真的 不明白为什么它在提交时将 "id"=>"results"
作为参数散列的一部分发送,但如果它会使用正确的控制器动作开始。
感谢任何想法。
是的,这是一个优先问题。由于 resources :doctors
在前,因此 GET show
将优先于 get 'doctors/results' => 'doctors#results'
将 get 'doctors/results' => 'doctors#results'
移动到 resources :doctors
上方应该可以解决您的问题
#routes.rb
root 'doctors#search'
get 'doctors/results' => 'doctors#results'
resources :users
resources :doctors