【发布时间】: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