Ruby on Rails:自定义搜索结果的路由
Ruby on Rails:自定义搜索结果的路由
我正在开发一个应用程序,供用户提交“冒险”内容,我希望设置单独的页面来显示按城市分类的冒险。我按照这个建议 (Ruby on Rails 4: Display Search Results on Search Results Page) 进行操作,使搜索结果显示在单独的页面上,这个方法效果非常好,但我想进一步,设置预设链接来将用户导向特定城市的冒险。我不确定如何在 http://localhost:3000/pages/tokyo
上显示从 http://localhost:3000/adventures/search?utf8=%E2%9C%93&search=Tokyo
获取的结果。而且,我对Rails非常陌生,这是我的第一个项目。
routes.rb
root 'adventures#index' resources :adventures do collection do get :search end end
adventures_controller
def search if params[:search] @adventures = Adventure.search(params[:search]).order("created_at DESC") else @adventures = Adventure.all.order("created_at DESC") end end
问题出现的原因是需要在Ruby on Rails中创建一个自定义路由,用于搜索结果的显示。解决方法是建立一个自定义路由,并在控制器和视图中实现相应的功能。
首先,在routes.rb文件中添加一个自定义路由:
get "/pages/:city", to: "pages#display_city", as: "display_city"
然后,在search方法中进行重定向:
def search if params[:search] redirect_to display_city_path(params[:search]) else @adventures = Adventure.all.order("created_at DESC") end end
接下来,在pages_controller.rb中实现display_city方法:
def display_city @adventures = Adventure.search(params[:city]).order("created_at DESC") #编写显示城市的代码 end
最后,在app/views/pages/display_city.html.erb文件中编写显示城市的代码。
如果希望保留除城市之外的其他搜索功能,可以在搜索表单中添加额外的参数。例如,如果应用了其他过滤器,可以使用params[:filter]
来传递这些参数。或者可以将城市参数单独发送,如params[:city]
。
感谢指出正确方向的帮助!