搜索表单没有路由到Rails 5.1中的适当控制器

我在这一天上已经挣扎了几天:

我的导航栏中有一个搜索表单,通过作业模型在我的Users表的:address列中运行搜索。 这是我的JobsController的索引方法:

def index @jobs = if params[:address] Job.joins(:user).where(users: { address: params[:address].downcase }).paginate(page: params[:page], per_page: 3) else @jobs = Job.paginate(page: params[:page], per_page: 3).order('id DESC') end end 

这是表格:

 

这是我的路线档案:

 Rails.application.routes.draw do devise_for :users get 'static_pages/home' get 'static_pages/faq' get 'static_pages/about' get 'static_pages/cgu' root 'static_pages#home' get '/faq', to: 'static_pages#faq' get '/about', to: 'static_pages#about' get '/contact', to: 'static_pages#contact' get '/cgu', to: 'static_pages#cgu' get '/signup', to: 'users#new' get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' resources :jobs, only: [:show, :index] resources :users do resources :jobs end resources 'contacts', only: [:new, :create], path_names: { new: '' } if Rails.env.development? mount LetterOpenerWeb::Engine, at: "/letter_opener" end 

结束

作业路由有两倍,因为我需要为未登录的用户/访问者提供索引和查看操作

部分铁路线显示: 耙路线

我的问题是,请求在路由中丢失,有时会转到错误的控制器。 如果我在Jobs#index页面: http:// localhost:3000 / jobs并搜索像“Nantes”这样的城市。 运行正常:

 Started GET "/jobs?utf8=%E2%9C%93&address=Nantes&commit=Rechercher" for 127.0.0.1 at 2017-11-20 08:34:48 +0400 Processing by JobsController#index as HTML Parameters: {"utf8"=>"✓", "address"=>"Nantes", "commit"=>"Rechercher"} Rendering jobs/index.html.erb within layouts/application (0.4ms) SELECT COUNT(*) FROM "jobs" INNER JOIN "users" ON "users"."id" = "jobs"."user_id" WHERE "users"."address" = $1 [["address", "nantes"]] Job Load (0.6ms) SELECT "jobs".* FROM "jobs" INNER JOIN "users" ON "users"."id" = "jobs"."user_id" WHERE "users"."address" = $1 LIMIT $2 OFFSET $3 [["address", "nantes"], ["LIMIT", 3], ["OFFSET", 0]] User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] Rendered jobs/index.html.erb within layouts/application (43.9ms) Rendered layouts/_header_out.html.erb (1.8ms) Rendered layouts/_messages.html.erb (0.5ms) Rendered layouts/_footer.html.erb (0.6ms) Completed 200 OK in 119ms (Views: 101.0ms | ActiveRecord: 7.1ms) 

如果我从我的根页面运行查询,即:StaticPagesController,则查询将发送到StaticPagesController,而不是发送到JobsController:

 Started GET "/?utf8=%E2%9C%93&address=Nantes&commit=Rechercher" for 127.0.0.1 at 2017-11-20 08:37:49 +0400 Processing by StaticPagesController#home as HTML Parameters: {"utf8"=>"✓", "address"=>"Nantes", "commit"=>"Rechercher"} Rendering static_pages/home.html.erb within layouts/application 

无论我在哪里,如何确保始终将查询发送到正确的控制器? 我在表单中尝试的任何东西似乎都没有用! 感谢你们。

我可以在您提供的表单摘要顶部看到一个冗余的form标记。 使用Simple Form您只需使用它提供的帮助程序:

 <%= simple_form_for @user do |f| %> <%= f.input :username %> <%= f.input :password %> <%= f.button :submit %> <% end %> 

这将生成一个包含用户名和密码标签的整个表单,并在您使用无效数据呈现表单时默认呈现错误(例如,在提交之后)。

因此,请删除以下代码段中表单的第一行:

  
<%= simple_form_for(jobs_path, method: :get) do %> <%= text_field_tag :address, params[:address], placeholder: "Votre Ville..." %> <%= submit_tag 'Rechercher', class:'btn btn-default' %> <% end %>

并重写它像: