2014-01-11 34 views
0

是否有可能在網站範圍內過濾數據庫記錄?我的型號是,match,team,playerdetail。現在,當我進入網站並選擇時,我希望網站上的所有內容僅顯示此特定的數據。Rails 4網站範圍的過濾器記錄

我的關係是:

league has_many matches 
match belongs_to team1 
match belongs_to team2 
team has_many players 
player has_many details 

請問可不可以?

+1

這個問題過於寬泛,無法用這種形式回答,但您可能想了解[嵌套資源](http://guides.rubyonrails.org/routing.html#nested-resources) –

+0

但嵌套資源僅適用於顯示/ league/id/matches之類的東西,我的意思是我想點擊比賽鏈接,然後它應該只顯示給定聯賽的比賽。我正在考慮像'before_filter'這樣的東西,它適用於我所做的每個查詢。 –

+0

爲了有規範的網址,你應該真的避免「魔術」,並直接在url中指定聯盟。 –

回答

1

你可以做這樣的:


原理

如果選項將是您的應用內容的主要決勝局,你可能要圍繞設計 模型

要做到這一點,你會讓你的root聯盟控制器,然後顯示數據基於該的相關內容

IE,而不是Team.joins(:league).where(league: "x"),你會怎麼做:

#Leagues 
league = League.find(x) 
league.matches 

這意味着你可以直接從數據庫中加載的聯賽,使得它更簡單的用戶


嵌套資源

的備選方案T o這是使用Michael Szyndel在他的評論中推薦的nested resources方法。這將使所以你要訪問的網址如下:

domain.com/leagues/1/matches/2/teams/1 

這樣做的好處是可以幹起來你的代碼,但它會增加許多額外的水平,以你的系統,你可能不想。我給什麼想看看我下面的概述:


代碼

#config/routes.rb 
root to: "leagues#index" 

#app/controllers/leagues_controller.rb 
def index 
    league = params[:league] ? params[:league] : "0" 
    @league = League.find(league) 
end 

#app/views/league/index.html.erb 
<%= form_tag('/') do %> 
    <%= select_tag 'league', options_for_select(League.all.collect {|u| [u.name, u.id] }) %> 
<% end %> 

<% @league.matches.each do |match| %> 
    <%= "#{match.team_1.name} vs #{match.team_2.name} : #{match.created_at}" %> 
<% end %> 

這將需要重新分解&擴展到包括比賽的細節,使「聯盟「會議變量等,但由於問題可能會被關閉,我想我會給你一些想法

底線是,它取決於你想要的應用程序的功能

+0

您能否檢查我對Michael Szyndels的迴應? –

+0

儘可能多地思考!你需要使用[Session Variables](http://guides.rubyonrails.org/action_controller_overview.html#session) - 你想讓我寫一些代碼嗎? –

+0

我已經在我的'application_controller'裏面設置了一個'before_filter',它將'current_league'當前'league'作爲我現在必須將這個變量添加到我的其他控制器中的每個動作以進行查詢? –