Ruby on Rails:自定义搜索结果的路由

12 浏览
0 Comments

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

0
0 Comments

问题出现的原因是需要在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]

感谢指出正确方向的帮助!

0