forms - Rails 4 form_tag 提交到错误的 Controller 操作

标签 forms ruby-on-rails-4 controller routes ruby-2.0

这感觉很愚蠢,但到目前为止,我读到的所有内容都让我觉得我做得对,但它仍然不起作用。

我正在使用 form_tag 将参数提交到自定义 Controller 操作。它似乎打算提交到我的 Controller 中的 show 操作,而不是我指示的操作,我需要为配置文件保留该操作。无论如何,这是代码(请原谅它是未重构的状态):

医生 Controller :

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>

同样,问题是我收到错误(无法找到带有“id”=结果的医生),因为表单使用的是我的显示操作与我的结果操作。应用程序跟踪显示错误位于 app/controllers/doctors_controller.rb:6:in 'show'。作为一个额外的困惑,我真的不明白为什么它在提交时发送 "id"=>"results" 作为参数哈希的一部分,但看起来是这样如果一开始就使用正确的 Controller 操作,则可能不是问题。

感谢您的任何想法。

最佳答案

是的,这是一个优先问题。由于 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

关于forms - Rails 4 form_tag 提交到错误的 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31627095/

相关文章:

javascript - 选择 - 从 URL 变量设置值

javascript - 动态删除表单元素

JavaScript AND 语句语法

java - Spring - 如何获取列表框jsp中的对象列表

function - 如何在 Symfony 中使用函数?

ruby - Rails - ActiveAdmin 未在菜单中显示新资源

ruby-on-rails - 单个 Controller 的 rails https 路由给出错误

mysql - 根据 Rails 4 中的 date_of_birth 从数据库中获取记录

java - 托管 bean 和 spring Controller 有什么区别?

session - Grails:在用户 session 期间存储数据的最佳方法