2016-11-05 9 views
0

私は最近RoRを教えようとしています。ここ数週間、いくつかのチュートリアルを通して、私が行っているように自分のアプリケーションの機能をいくつか追加しようとしています。私が実装しようとしている機能はかなりシンプルなようですが、私のソリューションは安全でエレガントなものであるかどうかは疑問です。RoR:列の値に基づいて特定の投稿を選択する

これまでのところ、ユーザーはサイトに投稿を送信できます。モデルは、画像、タイトル、カテゴリ、および記述で構成されます。ユーザーは、特定の投稿にコメントすることもできます(コメントは別の表に含まれています)。私はユーザーが特定のカテゴリを参照することができるナビゲーションバーのドロップダウンメニューを追加しようとしています。つまり、インデックスは、ユーザーが選択したカテゴリ内の投稿のみを表示する必要があります。私のソリューションは機能しますが、私はそれに不満です。ここでは、ナビゲーションバーのための私のコードは次のとおりです。ここで

%button#menu1.btn.btn-primary.dropdown-toggle{"data-toggle" => "dropdown", :type => "button"} 
    Explore 
    %span.caret 
    %ul.dropdown-menu{"aria-labelledby" => "menu1", :role => "menu"} 
    %li{:role => "presentation"} 
     %a 
     = link_to "All", posts_path(categories: "All") 
    %li{:role => "presentation"} 
     %a 
     = link_to "3D Modeling", posts_path(categories: "3D Modeling") 
    %li{:role => "presentation"} 
     %a 
     = link_to "Design", posts_path(categories: "Design") 
    %li{:role => "presentation"} 
     %a 
     = link_to "Drawing", posts_path(categories: "Drawing") 
    %li{:role => "presentation"} 
     %a 
     = link_to "Photography", posts_path(categories: "Photography") 
    %li{:role => "presentation"} 
     %a 
     = link_to "Printmaking", posts_path(categories: "Printmaking") 
    %li{:role => "presentation"} 
     %a 
     = link_to "Sculpture", posts_path(categories: "Sculpture") 
    %li{:role => "presentation"} 
     %a 
     = link_to "Other", posts_path(categories: "Other") 

はポストコントローラにおけるインデックス方式のための私のコードは次のとおりです。

if params[:categories] && params[:categories] == "All" 
    @posts = Post.all.order('created_at DESC').page params[:page] 
elsif params[:categories] && params[:categories] == "3D Modeling" 
    @posts = Post.where(category: "3D Modeling").page params[:page] 
elsif params[:categories] && params[:categories] == "Design" 
    @posts = Post.where(category: "Design").page params[:page] 
elsif params[:categories] && params[:categories] == "Drawing" 
    @posts = Post.where(category: "Drawing").page params[:page] 
elsif params[:categories] && params[:categories] == "Photography" 
    @posts = Post.where(category: "Photography").page params[:page] 
elsif params[:categories] && params[:categories] == "Printmaking" 
    @posts = Post.where(category: "Printmaking").page params[:page] 
elsif params[:categories] && params[:categories] == "Sculpture" 
    @posts = Post.where(category: "Sculpture").page params[:page] 
elsif params[:categories] && params[:categories] == "Other" 
    @posts = Post.where(category: "Other").page params[:page] 
end 

は最後に、ここでのコードは私のルート・ファイルである:

resources :post do 
    resources :comments do 
end 

root 'posts#index' 

私は別々にルートを処理する必要がありますか?カテゴリの列がポストモデルの一部であり、独自のテーブルではないので、そうではないでしょうか?あなたの助けをありがとう!

答えて

2

この

if params[:categories].present? 
    @posts = Post.where(category: params[:categories]).page(params[:page]) 
else 
    @posts = Post.all.order('created_at DESC').page(params[:page]) 
end 

を試してみて、カテゴリとのlink_toのカテゴリを削除: "すべて"

<%= link_to "All", posts_path %> 
+0

はい!それがトリックでした。答える時間をとってくれてありがとう。 –

関連する問題