ruby-on-rails - 修改现有 Rails 应用程序中的路线
问题描述
我尝试修改 Rails 应用程序中的现有路线,以使其对人类和谷歌更具可读性。
现有路线示例:http://localhost:3000/search_adv?locale=de&q[home_type_eq]=1
To: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
解决方案
你的问题表明你是如何考虑 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
推荐阅读
- asp.net-core - ASP Core 2.2 身份输入模型从登录本地化
- javascript - 在 React 类组件中执行循环
- leaflet - 是否有任何工具或以某种方式制作可以在其中管理多层的 OpenStreetMap 编辑器?
- reactjs - 防止在功能组件中渲染(React.memo 不够)
- yocto - 如何在包含目录 yocto 中安装文件
- javascript - 使用 Cheerio Js 选择具有相同类的特定元素
- java - Maven 不会在所有提供的存储库中寻找依赖项
- php - Bootstrap 未与 Laravel 8 集成
- python - 如何使用 Python 和 Selenium 通过 cookie 协议页面?
- r - R中的左对齐非制表符缩进