2017-04-16 53 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

對於選擇框,你可以做這樣的事情。創建一個表單,但使用get方法而不是post,所以它只是向查詢字符串添加一個查詢字符串。我在這裏包括引導類,僅僅是爲了展示如何添加類。

#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 %> 

因爲如果PARAMS你不需要它窩在控制器[:狀態]塊,因爲這似乎是在你的榜樣是多餘的。你也可以使用case語句而不是一堆if語句,但對於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