我的 Ruby on Rails 應用程式中有一個模型電影,我想要一些簡單的鏈接來顯示它的不同子集 - 例如,未看過的電影、沒有輸入制作年份的電影、被評為“優秀”的電影等等。
我在我的電影模型中為所有這些條件創建了范圍,例如
scope :no_year, -> { where(release_year: [0, nil, ""]) }
但隨后我想要一個這些子集的串列 - 如上所述,用戶可以點擊的鏈接串列,并將在默認視圖(實際上是電影索引視圖)中獲得結果。所以我有一個如下所示的鏈接串列,它要求我為所有這些看起來幾乎相同的范圍添加路由和方法。
<%= link_to 'Movies without a Year', noyear_movies_path %>
(<%= Movie.no_year.count %>)
路線.rb:
resources :movies do
get :noyear, on: :collection
end
電影控制器.rb:
def noyear
@q = Movie.no_year.ransack(params[:q]) # using Ransack for a sidebar that is displayed
@pagy, @movies = pagy(@q.result(distinct: true)) # using pagy to split up results
render 'index'
end
編輯:添加索引和側邊欄方法代碼。
我的索引方法如下所示:
def index
@pagy, @movies = pagy(@q.result(distinct: true))
end
...并且變數 q 本身在應用程式范圍內設定,因為它是在側邊欄中定義的,其中包含一個始終顯示的小搜索欄位:
def sidebar_q_movie
@q = Movie.ransack(params[:q])
end
我相信這可以更好地實作。但是由于我對 Ruby 還是很陌生,所以我不知道。任何提示表示贊賞!
uj5u.com熱心網友回復:
您可以使用查詢引數指定過濾器,而不是為每個電影過濾器設定單獨的路由 Movies#index
<%= link_to 'Movies without a Year', movies_path(filter: 'no_year') %>
并在控制器中:
def index
@movies = Movies.send(params[:filter])
end
當然,您可能希望首先通過檢查允許的字串串列來驗證過濾器引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/391089.html
標籤:红宝石轨道
上一篇:當REQUEST_URI不以不同模式開頭時,Htaccess重寫規則不起作用
下一篇:RoR路由的命名空間設定
