【问题标题】:RoR : routing design for projectRoR:项目的路由设计
【发布时间】:2015-05-02 09:40:57
【问题描述】:

我正在为两家酒店在 Rails 上创建一个新应用。我设法通过添加以下代码来操纵语言

scope "(:locale)", locale: /en|es|fr/ do
   get 'hotels/main'
   get 'hotel1/home'
   get 'hotel1/gallery'
   ...
   get 'hotel2/home'
   get 'hotel2/gallery'
   ...
end

提供以下路线作为交换:

(/:locale)/hotels/main(.:format)
(/:locale)/hotel1/home(.:format)
...
(/:locale)/hotel2/home(.:format)
...

我想做的是有一个名为 hotel_name 的变量,它有两个选项(hotel1,hotel2),并在 routes.rb 文件中调用它,这样我就不用在语言之后声明所有可能性,而是有两个选择( hotel1、hotel2) 和相关视图(家庭、画廊、书籍……)。

我尝试使用以前的视图创建一个模型酒店,但这两家酒店就像实例一样,但我不知道它们是否应该保留活动记录,因为我唯一感兴趣的是识别哪个是活动的,只是就像我知道的语言是一个符号,但在这种情况下我应该在哪里声明它以及如何操作它?

谢谢

更新 1

感谢@j-plato

我试过了,效果很好:

  scope "(:locale)", locale: /en|es|fr/ do
    scope "(:hotel_name)", name: /hotel1|hotel2/ do
      get 'home', controller: 'hotels', action: 'home'
      get 'gallery', controller: 'hotels', action: 'gallery'
      get 'book', controller: 'hotels', action: 'book'
      get 'tours', controller: 'hotels', action: 'tours'
      get 'directions', controller: 'hotels', action: 'directions'
      get 'visit', controller: 'hotels', action: 'visit'
    end
    get 'index', controller: 'hotels'
  end

但是我无法传递变量hotel_name,因为我没有实例化酒店。那么我应该在哪里做呢?虽然这应该给出这个 /locale/hotel_name/action 它只显示 locale/action 因为它找不到hotel_name

这行得通

<%= link_to "English", params.merge({:locale = 'en'}) %>

这不是

<%= link_to "hotel 1", params.merge({:hotel_name => 'hotel1'}), home_path %>

我需要做什么才能在酒店之间切换并像 :locale 一样传递 hotel_name 参数?

【问题讨论】:

    标签: ruby-on-rails ruby variables routes symbols


    【解决方案1】:

    如果我了解您要做什么,您可能希望将所有这些请求路由到酒店控制器,并将 hotel_name 作为参数传递给控制器​​方法。所以你可以这样做:

    get "hotels/:hotel_name/home", controller: "hotels", action: "home"
    

    如果你调用它:

    http://my_hotel_app.com/fr/hotels/hotel1/home
    

    控制器方法“home”将被调用,参数为:hotel_name = "hotel1"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多