2017-04-16 6 views
0

注文のステータスをステータス別に並べ替えています。今私の見解では、各カテゴリでフィルタリングするボタンがありますが、ドロップダウンメニューを実装したいと思います。私は誰もが何か提案がある場合、私もそれらを並べ替える方法をクリーンアップしたいと思います。ステータス別注文をソートするためのドロップダウンメニュー

admin_controller 

def dashboard 

@user = current_user 
@all_orders = Order.all 
if params[:status] 
    if params[:status] == "ordered" 
    @orders = Order.find_status("ordered") 
    elsif params[:status] == "paid" 
    @orders = Order.find_status("paid") 
    elsif params[:status] == "completed" 
    @orders = Order.find_status("completed") 
    elsif params[:status] == "cancelled" 
    @orders = Order.find_status("cancelled") 
    end 
else  
    @orders = Order.all 
end 
end 

ダッシュボードのビュー。今はボタンなので、ドロップダウンメニューが必要です。

<h3>All Orders</h3> 
<%= button_to "Ordered", admin_dashboard_path, method: :get, params: 
{status: "ordered"}, class: "btn btn-small"%> 
<%= button_to "Paid", admin_dashboard_path, method: :get, params: 
{status: "paid"}, class: "btn btn-small"%> 
<%= button_to "Completed", admin_dashboard_path, method: :get, params: 
{status: "completed"}, class: "btn btn-small"%> 
<%= button_to "Cancelled", admin_dashboard_path, method: :get, params: 
{status: "cancelled"}, class: "btn btn-small"%> 

答えて

0

選択ボックスでは、このようなことができます。フォームを作成しますが、postの代わりにgetメソッドを使用すると、パスにクエリ文字列が追加されます。ここでは、クラスの追加方法を示すためにブートストラップクラスを含めています。

#app/views/admin/orders/dashboard.html.erb 
<%= form_tag(admin_orders_path, method: "get", class: "input-group") do %> 
    <div class='input-group'> 
    <%= select_tag :status, options_for_select(['ordered', 'paid', 'completed', 'cancelled']), {prompt: "Select Status", class: "form-control"} %> 
    <div class='input-group-btn'> 
     <%= submit_tag "Filter by Status", name: nil, class: 'btn btn-default' %> 
    </div> 
    </div> 
<% end %> 

コントローラでは、if params [:status]ブロックにネストする必要はありません。その例では冗長であるようです。あなたはif文の束の代わりにcase文を使うこともできますが、4では大したことではありません。 find_statusがあなたが作成したメソッドであるか古いRailsバージョンになっていますが、whereメソッドが優先されるかもしれません。ソートに

def dashboard 
    @all_orders = Order.all 
    if params[:status] == "ordered" 
    @orders = Order.where(status: "ordered") 
    elsif params[:status] == "paid" 
    @orders = Order.where(status: "paid") 
    elsif params[:status] == "completed" 
    @orders = Order.where(status: "completed") 
    elsif params[:status] == "cancelled" 
    @orders = Order.where(status: "cancelled") 
    else  
    @orders = Order.all 
    end 
end 
+0

これは、おそらくcurrent_user.ordersを行うには良いアイデアではありません管理者のネームスペースである場合。 – Anton

+0

ええ、質問者が@user = current_userを持っていたのですが、実際には管理スペースで意味をなさない。私はそれを編集します。 –

0

、あなたはあなたのコードを少し乾燥させるためにこれを行うことができます:

# admin_controller.rb 

def dashboard 
    @user = current_user 
    @all_orders = Order.all 
    @orders = orders(params[:status]) 
end 

private 

def orders(status) 
    status.present? ? Order.find_status(status) : Order.all 
end 
関連する問題