我正在铁路上为两家酒店创建一个新的应用程序。我设法通过添加以下代码来操纵语言
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 %>
我需要做什么才能在酒店之间切换并传递hotel_name参数,就像:locale一样?
答案 0 :(得分:0)
如果我了解您尝试做什么,您可能希望将所有这些请求路由到酒店控制器,并将hotel_name作为参数传递给控制器方法。所以你能做的就是:
get "hotels/:hotel_name/home", controller: "hotels", action: "home"
如果您将其调用为:
http://my_hotel_app.com/fr/hotels/hotel1/home
控制器方法&#34; home&#34;将使用参数调用:hotel_name =&#34; hotel1&#34;