ruby-on-rails - rails 路由 : combine index and show actions

标签 ruby-on-rails rails-routing

我有一个现有的基于搜索的应用程序正在移植到 Rails。由于遗留性质,我需要保留以下形式的现有 URL:

/books          # search all books
/books/fiction  # search books with :category => fiction

我将这些映射到我的 Controller 的 indexshow 操作,它工作正常,但是用于显示所有书籍的代码和标记与特定类别的书籍书籍几乎完全相同。

组合 showindex 操作的最佳方式是什么?对于这个应用程序,index 实际上是 show:category => nil 的退化情况。

我能做到:

def index
   show
   render "show"
end

但这看起来有点丑陋。在 Rails 中是否有更惯用的方法来执行此操作?

最佳答案

为什么不简单地使用一个带有可选类别的路由:

get '/books(/:category)' => 'books#search'

然后在 BooksController 中:

def search
    # Look at params[:category], if it is there then use it
    # to search, if it isn't there then list 'em all.
    @results = ...
end

然后你只有一条路线、一个 Controller 、一个 View (控制它们并在黑暗中绑定(bind)它们)并且没有重复或欺骗。

关于ruby-on-rails - rails 路由 : combine index and show actions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867633/

相关文章:

ruby-on-rails - 当 Ruby on Rails 上不存在时,将 WWW 添加到 URL

ruby-on-rails - 使用可选参数进行路由

ruby-on-rails - 创建 has_one 关联错误 Rails 4

ruby-on-rails - 在不使用 respond_to block 的情况下更改 Rails 中的 CSV 名称

ruby-on-rails - 如何在 Ruby on Rails 中创建批量操作事务

ruby-on-rails - 我在使用 Rails 4.1 路由时遇到问题

ruby-on-rails - Rails 路由,:as option also changes the params hash . ..如何覆盖它?

ruby-on-rails - 命名空间或范围内的根目录不适用于 rails 5.0.0-beta1

ruby-on-rails - Ruby on Rails 4 使用内部联接计数不同

javascript - 尝试在我的 Rails 应用程序中截屏页面时 PhantomJS.rb 卡住