2017-11-20 4 views
1

Railsの中で適切なコントローラへのルーティングではありませんジョブモデルを介して。ここで検索フォームは、私はこの1つ上の数日間に苦労してきた5.​​1

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 

フォームされています:

<form class="navbar-form navbar-left"> 
<div class="form-group"> 
    <%= 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 %> 
</div> 
ここ

は私のルートファイルである:ここに私のJobsControllerのインデックス方法がある

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 

エンド

ジョブのルートはthですERE二回私は私のレールルートの

パートユーザー/訪問者でログインして非のインデックスとビューのアクションが利用できるようにする必要があるとして、示しています rake routes

私の問題があり、要求がルートに、時には失われること間違ったコントローラに行きます。私がJobsの#インデックスページにいる場合: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へとNOT 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 

は、どのように私は確認してください私がどこにいるかにかかわらず、クエリは常に正しいコントローラに送信されますか?私がフォームで試したことは何も動作していないようです!君たちありがとう。

+1

はあなた 'コントローラに応じて' form' URLを変更する必要があります'と' 'アクション '。あなたの検索フォームの一部のビューファイルコードで質問を更新してください。 – Emu

+0

@Rodolpheあなたの 'form'は次のようになります:' form_tag(jobs_path、method::get) ' – hgsongra

+0

皆さん、私は私の投稿を更新しました。はい、フォームは正しいです。しかしルーティングはまだ動作していない、と私は理由を知らない..... –

答えて

1

提供されたフォームスニペットの上部に冗長formタグが表示されます。後に(これは同様に、ユーザー名とパスワードのラベルとフォーム全体を生成し、無効なデータでフォームをレンダリングするとき、デフォルトではエラーをレンダリングします

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

Simple Formを使用して、あなたはそれが提供するヘルパーを使用する必要があります例えば、提出する)。

したがって、次のスニペットでは、フォームの最初の行を削除してください:好き

<form class="navbar-form navbar-left"> 
<div class="form-group"> 
    <%= 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 %> 
</div> 

をし、それを書き換える:

<div class="form-group navbar-form navbar-left"> 
    <%= 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 %> 
</div> 
+2

こんにちはWasif。よく目撃された。まさにそれでした。冗長なフォームタグが問題でした。私はあなたが提案した通りにうまくいった。ありがとうございました! –

+0

大歓迎です! –

関連する問題