我不确定我是否了解如何最好地创建路线及其控制器。请帮助这种情况

时间:2014-06-17 19:59:26

标签: ruby-on-rails routing

可能是。我通过我的模型第一次通过,然后开始创建简单的控制器。现在我开始做涉及嵌套的控制器,以及各种不同的关联。

我会给它一些背景而不是a,b,c。

世界杯应用程序,模型如下。让我们输入阿根廷本周六即将对阵伊朗的比赛信息。

舞台(has_many匹配)

ID |名称|起始日期| END_DATE

1 |资格赛阶段| 2011年6月1日| 2013年11月31日

2 |小组赛阶段| 2014年6月12日| 2014年6月27日

3 |淘汰赛阶段| 2014年6月28日| 2014年7月13日

玩家(belongs_to团队)

ID | TEAM_ID | first_name的|姓氏|数目

1 | 1 |梅西|梅西| 10

团队(has_many球员,has_many比赛,class_name:'竞争对手',has_many比赛,通过比赛)

ID |国家|

1 |阿根廷

2 |伊朗

匹配(has_many竞争对手,has_many团队,通过竞争对手,属于舞台)

ID | stage_id | start_date_at

17 | 2 | 2014年6月21日

竞争对手(belongs_to match,belongs_to team)

ID | match_id | TEAM_ID |家居

33 | 17 | 1 |假

34 | 17 | 2 |真

我在模糊示例中引用的URL是api / v1 / players / 1 / matches。访问#index的这个URL将列出所有Lionel Messi的比赛。

但是,让我们在我们的应用程序中点击Lionel Messi的个人资料,我们希望今天能够展示梅西的比赛。

我希望以某种方式将今天的日期作为过滤器传递,并将其用于~player.team.matches.where(' start_date_at =?',DateTime.now.to_date) 。

a)这样做的正确网址是什么?我只是将此过滤功能添加到#index?默认情况下,如果没有向URL添加过滤,则只返回所有玩家匹配,但如果是(/ api / v1 / players / 1 / games?date ="")则在#index?如果我碰巧只允许一个过滤器,并且可以保证只返回1个匹配怎么办?比如一天,每天不超过1场比赛。这是属于#show还是#index,还是我错过了这两条船?

b)如果相反我想要能够根据舞台过滤玩家匹配。在这种情况下,它有可能返回超过1个结果。让我们说用户无论出于什么原因想回去查看所有Lionel Messi的资格赛游戏。 player.team.games.where(' stage_id = 1')。我是否只允许在#index下进行各种过滤?

c)我忘了问一个问题。让我们说我们只想成为今天的对手。任何莱昂内尔·梅西的球迷都知道他效力于阿根廷,所以在他的个人资料中,我们只想要一些可以说“伊朗”的话。 2014年6月21日。

所以竞争对手为每个match_id保留2行。主队和客场球队。如果我们做一个player.find(:player_id).team.competitions,我们会收到回来......

ID | match_id | TEAM_ID |家 33 | 17 | 1 |假

它已经让我们知道我们是match_id 17中的客场球队。获得对手的最佳方式是什么?

我有点想我应该遍历player.find(:player_id).team.matches,然后使用每个match_id获取每个匹配的两个竞争对手的列表。然后将它们全部返回到API,API可以从数据中拉出对手团队。这看起来是最好的方式吗?

0 个答案:

没有答案