可能是。我通过我的模型第一次通过,然后开始创建简单的控制器。现在我开始做涉及嵌套的控制器,以及各种不同的关联。
我会给它一些背景而不是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可以从数据中拉出对手团队。这看起来是最好的方式吗?