【问题标题】:Searching based on field content - Ruby on Rails基于字段内容的搜索 - Ruby on Rails
【发布时间】:2012-02-20 22:27:34
【问题描述】:

所以我正在创建一个 ruby​​ on rails 应用程序,在我看来,我有一个 link_to 列表,每个都是不同的控制台

在我的数据库表中,我有一个名为控制台的字段。

我想要做的是当用户点击一个链接时,例如Playstation 3,它将返回所有在该表列中列出了 Playstation 3 的记录。

我想知道我该怎么做,我尝试在互联网上搜索但没有找到类似的东西。

这是一个我没有很长时间完成的项目。我拥有我将在视图中的链接中声明的内容以及我将在 games_controller 中放置的内容。

任何帮助将不胜感激。

【问题讨论】:

  • 如果有人解决了您的问题,您应该点击他们答案旁边的绿色复选标记。这会将他们的答案标记为“已接受”。保留问题的标题。

标签: ruby-on-rails ruby search link-to


【解决方案1】:

基本要点是有一个控制器动作,它将返回按控制台过滤的游戏列表。例如,

# GamesController.rb
def index
   @games = Game.find_by_console(params[:console])
end

然后您可以为任何特定的控制台创建一个链接:

link_to 'XBOX', games_path(:console => 'XBOX')

这应该会导致对 URL /games?console=XBOXGET 请求

如果您有一组预定义的控制台,您可能会考虑将它们变成 Consoles 模块中的常量,以避免在任何地方对其进行硬编码。

更新:

由于您尝试在同一链中实现搜索和过滤,因此您需要确保find_by_console 不存在时不会被调用。

# GamesController.rb
def index
   @games = Game.search(params[:search])
   @games = @games.find_by_console(params[:console]) unless params[:console].blank?
end

【讨论】:

  • 谢谢卡洛斯。现在我的 GamesController 中有以下内容:@games = Game.paginate(:per_page => 4, :page => params[:page]).search(params[:search]).find_by_console(params[:console])但是我现在收到以下错误:您没有预料到它有一个 nil 对象!您可能期望有一个 Array 的实例。评估 nil.each 时发生错误——我必须做些什么来解决这个问题。感谢您的所有帮助。
  • 听起来您的搜索方法没有返回任何结果,然后您尝试对其调用 find_by_console。
  • 请记住,如果没有找到结果,find_by_console 方法将返回 nil。您可以通过将整个表达式包装在 Array.wrap 调用中来解决此问题,例如 Array.wrap(Game.paginate ...)
  • 嘿卡洛斯,我试过了,虽然它摆脱了任何错误消息,但它不仅显示一个空白表,即使您单击控制台链接或在搜索中键入产品,它也会返回并空表。我的代码如下索引行:@games = Array.wrap(Game.search(params[:search]).find_by_console(params[:console]))
  • 由于您在同一个链中实现搜索和过滤,因此您要确保如果未指定过滤器,则不调用find_by_console,否则它将过滤掉所有结果。我已经更新了上面的答案
猜你喜欢
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2010-11-05
相关资源
最近更新 更多