【问题标题】:Multiple index actions in RailsRails 中的多个索引操作
【发布时间】:2015-11-26 10:53:21
【问题描述】:

我有一个Game 模型和GamesController。目前,我的index 页面显示了数据库中用于应用程序的前 10 条记录。但是,我想制作另一个页面来显示所有游戏。

我的问题是,Rails 方式™ 是如何实现这一目的的?是否可以让我的GamesControllerindex 操作根据我要呈现的 URL 发出请求? (类似于http:localhost:3000/all

Rails 3.1 - How do I organize multiple index actions for the same model? 与我的问题最接近,但该问题解决了可追溯到 2012 年的 rails 3.1 的问题。

【问题讨论】:

  • 您可以使用Request.url 来检查调用了哪个url。虽然我会建议对这两个操作使用不同的操作。
  • @Зелёный 你读过我的问题了吗?我见过这个问题,但我的性质不同。

标签: ruby-on-rails ruby-on-rails-4 controller


【解决方案1】:

每个控制器实际上只能有一个索引操作,但有几种方法可以实现这一点。

首先,只需创建一个新操作并拥有一个单独的页面。为它想一个合适的名称并创建控制器、路由和视图。通过将大部分视图代码放在部分视图中并在两个视图中使用,您可以将代码量保持在最低限度。

如果您真的只想要一个操作,另一种方法是将参数传递给索引控制器并根据该参数查询数据库。例如:

link_to 'link text', game_index_path(:g => 'all')

将创建一个 url,如: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

您可以使用相同的方法来实现排序和过滤以及各种各样的事情。

【讨论】:

  • 太棒了,正是我一直在寻找的答案。我不确定在标准操作之外创建一个全新的操作是否是一种好习惯(在这种情况下,我只是将我的操作命名为“全部”并创建了特定的视图和路线)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2013-07-28
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
相关资源
最近更新 更多