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