我有Game
模型和GamesController
。目前,我的index
页面显示了数据库中出于应用目的的前10条记录。但是,我想制作另一个显示所有游戏的页面。
我的问题是,实现此目的的Rails way™是什么?我的index
的{{1}}操作是否可以根据我想要呈现的网址发出请求? (类似于GamesController
)
Rails 3.1 - How do I organize multiple index actions for the same model? 是最接近我的问题,但这个问题解决了可追溯到2012年的rails 3.1的问题。
答案 0 :(得分:1)
每个控制器实际上只能有一个索引操作,但有几种方法可以实现这一点。
首先,只需创建一个新动作并拥有一个单独的页面。考虑适当的名称并创建控制器,路径和视图。您可以通过将部分视图代码放在一个部分中来将代码量保持在最低限度,并在两个视图中使用它。
另一种方法是,如果您真的只想要一个操作,那就是将参数传递给索引控制器并根据该参数查询数据库。例如:
link_to 'link text', game_index_path(:g => 'all')
会创建一个网址,例如:http://domain.com/game/index?g='all',在控制器中你可以这样做:
def index
which_games = params[:g] # should be all in this case
@games = Game.where(:criteria => which_games)
end
您可以使用相同的方法来实现排序和过滤以及各种各样的事情。