是否有可能在网站范围内过滤数据库记录?我的模型是league
,match
,team
,player
和detail
。现在,我希望当我进入网站并选择league
时,网站上的所有内容都只显示此特定league
的数据。
我的关系是:
league has_many matches
match belongs_to team1
match belongs_to team2
team has_many players
player has_many details
这可能吗?
答案 0 :(得分:1)
你可以这样做:
<强>原理强>
如果league
选项将成为您应用内容的主要决策者,您可能需要设计围绕 league
模型
要执行此操作,您需要将root
作为联盟控制者,然后根据league
的相关内容显示数据
I.E而不是Team.joins(:league).where(league: "x")
,你会这样做:
#Leagues
league = League.find(x)
league.matches
这意味着您可以直接从数据库加载联盟,使用户更加简单
嵌套资源
替代方法是使用Michael Szyndel在评论中推荐的nested resources方法。这将使您必须按如下方式访问URL:
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 %>
这需要重新考虑和重新考虑。扩展到包括匹配细节,使“联盟”成为会话变量等,但由于问题可能会被关闭,我想我会给你一些想法
最重要的是,它取决于您希望应用程序如何运作