Ruby on rails 参数传递到URL Ruby on Rails

Ruby on rails 参数传递到URL Ruby on Rails,ruby-on-rails,ruby,routes,params,Ruby On Rails,Ruby,Routes,Params,我的form_标签搜索功能无法正确地将我重定向到可以查看搜索结果的位置,我遇到了一些问题。 昨天工作正常,单击搜索的提交按钮后,向pets控制器search方法发出get请求,然后我被重定向到显示结果的results.html.erb页面 问题是,现在当我提交搜索时,它只是刷新页面(index.html.erb),我的参数被传递到URL,但没有显示我搜索的“宠物” http://localhost:3000/?utf8=%E2%9C%93&authenticity_token=iDXug

我的
form_标签
搜索功能无法正确地将我重定向到可以查看搜索结果的位置,我遇到了一些问题。 昨天工作正常,单击搜索的提交按钮后,向
pets
控制器
search
方法发出
get
请求,然后我被重定向到显示结果的
results.html.erb
页面

问题是,现在当我提交搜索时,它只是刷新页面(
index.html.erb
),我的参数被传递到URL,但没有显示我搜索的“宠物”

http://localhost:3000/?utf8=%E2%9C%93&authenticity_token=iDXugIhTyjknCMpPh2P5x7voNMSQ3Y7Aa1HIZPA7xqZ9Oj4CAuVc5eJPqfE1CLwxXAsCebgPuNWqpOk381TlvQ%3D%3D&pets%5Bzip_code%5D=10019&pets%5Bspecies%5D=Cat&pets%5Bbreed%5D=&pets%5Bage%5D=&pets%5Bsex%5D=&pets%5Bsize%5D=&commit=Find+Pets%21
之前,它只是重定向我的结果页面
localhost:3000/results

这是我的宠物控制器

class PetsController < ApplicationController



  def index #index page will render search form
    @pet = Pet.new
    #send form data in params to create
  end


  def search
    @pets = Pet.where(clean_params)
    render :results
  end

  private

  def thinned_params
    params["pets"].delete_if {|k, v| v.empty?}
  end

  def clean_params
    thinned_params.permit(:species, :zip_code, :sex, :size, :breed, :age)
  end

end
最后…我的路线。rb

所以我的问题是,为什么我的参数会被传递到URL,而URL应该只点击
pets
控制器中的
search
方法,并将我重定向到显示信息的结果页面? 第二个问题,很明显,我能做些什么来解决这个问题

更新 这是单击“搜索”按钮时我的控制台的输出

Started GET "/?utf8=%E2%9C%93&authenticity_token=NgVe%2Fe5i6sn8ijRmgcvOezp62KlymrNRWPJfFNOVJ54ChWpZf8JYTm%2Fk%2FeHdDsvcgzdBYe%2BjUX5jiz2JeALEpQ%3D%3D&pets%5Bzip_code%5D=10019&pets%5Bspecies%5D=Cat&pets%5Bbreed%5D=&pets%5Bage%5D=&pets%5Bsex%5D=&pets%5Bsize%5D=&commit=Find+Pets%21" for ::1 at 2015-03-15 15:54:34 -0400
Processing by WelcomeController#index as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"NgVe/e5i6sn8ijRmgcvOezp62KlymrNRWPJfFNOVJ54ChWpZf8JYTm/k/eHdDsvcgzdBYe+jUX5jiz2JeALEpQ==", "pets"=>{"zip_code"=>"10019", "species"=>"Cat", "breed"=>"", "age"=>"", "sex"=>"", "size"=>""}, "commit"=>"Find Pets!"}
  Pet Load (0.7ms)  SELECT "pets".* FROM "pets"
  CACHE (0.0ms)  SELECT "pets".* FROM "pets"
  CACHE (0.0ms)  SELECT "pets".* FROM "pets"
  CACHE (0.0ms)  SELECT "pets".* FROM "pets"
  Breed Load (0.2ms)  SELECT "breeds".* FROM "breeds" INNER JOIN "pet_breeds" ON "breeds"."id" = "pet_breeds"."breed_id" WHERE "pet_breeds"."pet_id" = ?  [["pet_id", 71]]
  Shelter Load (0.1ms)  SELECT  "shelters".* FROM "shelters" WHERE "shelters"."id" = ? LIMIT 1  [["id", 26]]
  Breed Load (0.3ms)  SELECT "breeds".* FROM "breeds" INNER JOIN "pet_breeds" ON "breeds"."id" = "pet_breeds"."breed_id" WHERE "pet_breeds"."pet_id" = ?  [["pet_id", 73]]
  CACHE (0.0ms)  SELECT  "shelters".* FROM "shelters" WHERE "shelters"."id" = ? LIMIT 1  [["id", "26"]]
  Breed Load (0.1ms)  SELECT "breeds".* FROM "breeds" INNER JOIN "pet_breeds" ON "breeds"."id" = "pet_breeds"."breed_id" WHERE "pet_breeds"."pet_id" = ?  [["pet_id", 41]]
  Shelter Load (0.1ms)  SELECT  "shelters".* FROM "shelters" WHERE "shelters"."id" = ? LIMIT 1  [["id", 16]]
  Breed Load (0.1ms)  SELECT "breeds".* FROM "breeds" INNER JOIN "pet_breeds" ON "breeds"."id" = "pet_breeds"."breed_id" WHERE "pet_breeds"."pet_id" = ?  [["pet_id", 9]]
  Shelter Load (0.1ms)  SELECT  "shelters".* FROM "shelters" WHERE "shelters"."id" = ? LIMIT 1  [["id", 5]]
  Rendered welcome/index.html.erb within layouts/application (20.9ms)
Completed 200 OK in 127ms (Views: 125.2ms | ActiveRecord: 1.6ms)
耙路径

根据您的路由文件,搜索操作只接受POST(不接受GET):

这似乎是合适的,因此只需将表单操作更改为使用POST方法:

form_tag :controller => 'pets', :action => 'search', :method => :post

您的路线是
POST
,但这毫无意义,您是否正在尝试更新或更换宠物?不,你有宠物的名单。您已经在表单中调用了一个
GET
请求,因此您可以保留该请求,然后进行更改
post'/pets/search'=>“pets#search”
get'/pets/search'=>“pets#search”


更多。

不完全是,你更多的是
获取宠物列表,而不是更新或替换宠物。你发布了一堆表单变量。除非你想在URL中使用这些垃圾,否则使用POST。不完全是这样,你应该看看它们的意思是什么“GET方法意味着检索任何信息(以实体的形式)由请求URI标识。如果请求URI指的是数据生成流程,则应将生成的数据作为响应中的实体返回,而不是流程的源文本,除非该文本恰好是流程的输出。”“POST方法用于请求源服务器接受请求中包含的实体,作为请求行中请求URI标识的资源的新从属。这篇文章的设计是为了让一个统一的方法涵盖以下功能:“看看我对注入式答案的评论。尝试了两种解决方案,仍然是同一个问题……:(没错,是的,我完全同意你的观点。约定重于配置:)为什么索引会创建一个新的宠物?索引和搜索应该是一个动作(索引),现在我看一下。请发布您发出请求时的web服务器日志输出。这些日志将告诉您服务器认为您在请求什么,以及它试图告诉浏览器什么。现在,检查更新OK命令行上的
rake routes
的结果如何?查看实际的路由特德。
Started GET "/?utf8=%E2%9C%93&authenticity_token=NgVe%2Fe5i6sn8ijRmgcvOezp62KlymrNRWPJfFNOVJ54ChWpZf8JYTm%2Fk%2FeHdDsvcgzdBYe%2BjUX5jiz2JeALEpQ%3D%3D&pets%5Bzip_code%5D=10019&pets%5Bspecies%5D=Cat&pets%5Bbreed%5D=&pets%5Bage%5D=&pets%5Bsex%5D=&pets%5Bsize%5D=&commit=Find+Pets%21" for ::1 at 2015-03-15 15:54:34 -0400
Processing by WelcomeController#index as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"NgVe/e5i6sn8ijRmgcvOezp62KlymrNRWPJfFNOVJ54ChWpZf8JYTm/k/eHdDsvcgzdBYe+jUX5jiz2JeALEpQ==", "pets"=>{"zip_code"=>"10019", "species"=>"Cat", "breed"=>"", "age"=>"", "sex"=>"", "size"=>""}, "commit"=>"Find Pets!"}
  Pet Load (0.7ms)  SELECT "pets".* FROM "pets"
  CACHE (0.0ms)  SELECT "pets".* FROM "pets"
  CACHE (0.0ms)  SELECT "pets".* FROM "pets"
  CACHE (0.0ms)  SELECT "pets".* FROM "pets"
  Breed Load (0.2ms)  SELECT "breeds".* FROM "breeds" INNER JOIN "pet_breeds" ON "breeds"."id" = "pet_breeds"."breed_id" WHERE "pet_breeds"."pet_id" = ?  [["pet_id", 71]]
  Shelter Load (0.1ms)  SELECT  "shelters".* FROM "shelters" WHERE "shelters"."id" = ? LIMIT 1  [["id", 26]]
  Breed Load (0.3ms)  SELECT "breeds".* FROM "breeds" INNER JOIN "pet_breeds" ON "breeds"."id" = "pet_breeds"."breed_id" WHERE "pet_breeds"."pet_id" = ?  [["pet_id", 73]]
  CACHE (0.0ms)  SELECT  "shelters".* FROM "shelters" WHERE "shelters"."id" = ? LIMIT 1  [["id", "26"]]
  Breed Load (0.1ms)  SELECT "breeds".* FROM "breeds" INNER JOIN "pet_breeds" ON "breeds"."id" = "pet_breeds"."breed_id" WHERE "pet_breeds"."pet_id" = ?  [["pet_id", 41]]
  Shelter Load (0.1ms)  SELECT  "shelters".* FROM "shelters" WHERE "shelters"."id" = ? LIMIT 1  [["id", 16]]
  Breed Load (0.1ms)  SELECT "breeds".* FROM "breeds" INNER JOIN "pet_breeds" ON "breeds"."id" = "pet_breeds"."breed_id" WHERE "pet_breeds"."pet_id" = ?  [["pet_id", 9]]
  Shelter Load (0.1ms)  SELECT  "shelters".* FROM "shelters" WHERE "shelters"."id" = ? LIMIT 1  [["id", 5]]
  Rendered welcome/index.html.erb within layouts/application (20.9ms)
Completed 200 OK in 127ms (Views: 125.2ms | ActiveRecord: 1.6ms)
post '/pets/search' => 'pets#search'
form_tag :controller => 'pets', :action => 'search', :method => :post