【问题标题】:Custom url in ruby on railsruby on rails 中的自定义 url
【发布时间】:2012-09-01 05:10:53
【问题描述】:


我知道 rails 使用控制器操作样式的 url,例如 www.myapp.com/home/index
我想在我的 Rails 应用程序上有一个这样的网址,www.myapp.com/my_page_here 这可能吗?如果可以,我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby url url-routing


    【解决方案1】:

    你只需要制定一个路由规则来匹配那个 url 在这种情况下,它将类似于

    match 'my_page_here' => 'your_controller#your_action'
    

    您的控制器和操作将指定该页面的行为

    所以你可以做

    match 'my_page_here' => 'home#index'
    

    get 'my_page_here', :to => 'home#index'
    

    正如其他回复中所建议的那样。

    如果您有这样的控制器,则用于家庭控制器中的索引操作

    查看http://guides.rubyonrails.org/routing.html了解更多详情

    还查看Ruby on Rails Routes - difference between get and match

    【讨论】:

    • match 已旧,不应使用!
    • 您可以使用 :via => [:get] 使匹配只响应 GET 请求。对于普通的静态页面,匹配工作正常。 Rails 以这样一种方式构建,应用程序制造商不需要知道 HTTP 动词 - 因此对于大多数内容显示页面,rails 使用 match 减轻了 http 的负担。
    【解决方案2】:

    您只需在routes.rb 文件中的任何resourcesnamespace 块之外使用get

    get 'my_page_here ', :to => 'home#index'
    

    假设您使用的是 Rails 3+,请不要使用 match。这可能很危险,因为如果页面接受来自表单的数据,它应该接受 POST 请求。 match 将允许对具有副作用的操作发出 GET 请求 - 这不好。

    尽可能使用getputpost 或这些变体。

    要获得路径助手,请尝试:

    get 'my_page_here ', :to => 'home#index', :as => :my_page
    

    这样,在您看来,my_page_path 将等于 http://{domain}/my_page_here

    【讨论】:

    • 在最后加上:as => :my_page,你会得到一个my_page_path helper 在你的视图中使用。
    • 有点晚了,但是路径助手生成路径而不是 url。所以my_page_path 将返回"/my_page_here"
    猜你喜欢
    • 2016-11-28
    • 2014-07-27
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2021-04-19
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多