Rails 4站点范围的过滤记录

时间:2014-01-11 11:16:07

标签: ruby-on-rails

是否有可能在网站范围内过滤数据库记录?我的模型是leaguematchteamplayerdetail。现在,我希望当我进入网站并选择league时,网站上的所有内容都只显示此特定league的数据。

我的关系是:

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

这可能吗?

1 个答案:

答案 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 %>

这需要重新考虑和重新考虑。扩展到包括匹配细节,使“联盟”成为会话变量等,但由于问题可能会被关闭,我想我会给你一些想法

最重要的是,它取决于您希望应用程序如何运作