1

アプリのルートを設定する最良の方法を探しています。

このアプリケーションを使用すると、ユーザーは求人の登録、投稿、および求人への応募を行うことができます。私が抱えている問題は、実際には異なるものを表示するはずの 2 つのルートが同じページにリンクしていることです。

私のルートは次のとおりです。

 resources :users do
   resources :apps
 end

 resources :jobs do
   resources :apps
 end

この結果、次の 2 つのパスに行き着きます。

users/id/apps
jobs/id/apps

私がやりたいのは、最初のパスを使用して、ユーザーが完了した求人応募を表示することです。次に、2 番目のパスを使用して、ジョブの所有者がそのジョブに対して受け取ったアプリケーションを表示したいと思います。

私が抱えている問題は、両方のパスが最終的にapps#index

これを最適にルーティングする方法について人々が提供できるアドバイスは大歓迎です! :)

4

2 に答える 2

2

これらのパスは両方とも、あなたがやりたいことに問題がない可能性があります。依頼が入ると

users/:user_id/apps

次に、コントローラーで次のようなことを実行して、アプリのリストを作成できます。

@apps = User.find_by_id(params[:user_id]).apps

他のパスの場合、同じことを行いますがparams[:jobs_id]、たとえば

@apps = Job.find_by_id(params[:job_id]).apps

コントローラーには、リクエストがどのパスを介して入ったかに応じて @apps を構築する条件付きコードがあります (:user_id または :job_id がパラメーターにあるかどうかを確認することによって)...次のようなもの:

if params[:user_id]
    @apps = User.find_by_id(params[:user_id]).apps
elsif params[:job_id]
    @apps = Job.find_by_id(params[:job_id]).apps
end

または多分リファクタリング...

if params[:user_id]
    @user = User.find(params[:user_id])
    @apps = @user.apps
elsif params[:job_id]
    @job = Job.find(params[:job_id])
    @apps = @job.apps
end
于 2012-07-09T16:25:49.930 に答える
1

「resources」キーワードを使用すると、レールはデフォルトのルートにマップされます。
特定のルートを別のものにマッピングしたい場合は、「一致」の使用を検討する必要があります。
例えば:

match "users/id/apps" => "users/id/apps"
match "jobs/id/owners" => "jobs/id/owners"

このページには、より詳細な使用方法が示されています: http://guides.rubyonrails.org/routing.html
また、ルートを別のものまたはコード自体に変更するオプションもあります。
それが役立つことを願っています。

于 2012-07-09T16:39:47.807 に答える