【问题标题】:Modify routes in existing Rails Application修改现有 Rails 应用程序中的路线
【发布时间】:2020-01-27 09:44:24
【问题描述】:

我尝试修改 rails 应用程序中的现有路线,使其对人类和谷歌更具可读性。

现有路由示例:http://localhost:3000/search_adv?locale=de&q[home_type_eq]=1

收件人:http://localhost:3000/bowling?locale=de 如何在不修改“大”代码的情况下创建这些路由?

其中 home_type=1 参数对应保龄球。 home_type=2 到餐厅等等。 总共有六个这样的参数。

在 routes.rb 中:get 'search_adv' => 'pages#search_adv' 在控制器中:

  def search_adv
    if params[:search_adv].present? && params[:search_adv].strip != ""
      session[:loc_search] = params[:search_adv]
    end

    if session[:loc_search] && session[:loc_search] != ""
      @rooms_address = Room.where(active: true).paginate(page: params[:page], per_page: 10).near(session[:loc_search], 1000, order: 'distance')
    else
      @rooms_address = Room.where(active: true).paginate(page: params[:page], per_page: 10)
    end

【问题讨论】:

  • 我建议您从阅读the rails documentation on default route parameters 开始。您似乎想定义六个自定义路由,并指定一个默认查询参数。
  • 如果您无法从文档中弄清楚,那么也许可以分享您的尝试——也许我们可以改进文档,让未来的开发人员(例如您自己)更清楚地完成这项任务?
  • 您应该包括创建它们所来自的页面的html.erb 文件,以及所生成页面的实际相关html。

标签: ruby-on-rails ruby routes


【解决方案1】:

您的问题显示了您对 Rails 的看法,这不是正确的方法,我也会建议 Tom Lord 的建议,但有一种方法可以做您想做的事情,尽管这需要对您的代码库进行重大重构不值得:

您可以为 home_types(餐厅、保龄球等)分别添加一个 M、V 和 C,然后根据参数从 search_adv 方法重定向到该控制器路由。

例如:

你点击http://localhost:3000/search_adv?locale=de&q[home_type_eq]=1然后在search_adv你就可以

  if params[the exact params containing your value] == 1
    redirect_to bowlings_path(locale: 'de')
  end

用户不会感觉到它,因为重定向将发生在后端,但稍后的路线将如下所示:

  http://localhost:3000/bowlings?locale=de

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多