如何在视图Ruby on Rails中路由您的子文件夹?

时间:2012-11-05 14:54:28

标签: ruby-on-rails ruby views routes subdirectory

任何人都可以了解如何路由你的子文件夹的.html.erb文件?它是这样放置的:

view/pages/en/index.html.erb

并且路由此我正在做route.rb

的事情
match ':lang/index', :to => 'pages/en#index'

对于链接代码,我在标题

上有这个
<%= link_to "Home", index_path %>

我得到的错误是

 Routing Error
 uninitialized constant Pages

路线:

enter image description here

4 个答案:

答案 0 :(得分:3)

命名空间将在子文件夹中组织您的代码和视图:http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

如果只需要以这种方式组织的views/pages文件夹,您可以在PagesController中执行以下操作:

render "#{I18n.locale}/#{action_name}"

一个问题:您为什么要view/pages/en/index.html.erb代替view/pages/index.en.html.erb?那将是开箱即用的。

答案 1 :(得分:2)

<强>更新 这是它对route.rb的工作方式: -

match ':lang/index', :to => 'pages#index'

在控制器上渲染: -

def index
  render "pages/en/index"
end

def about
  render "pages/#{params[:lang]}/about"
end

答案 2 :(得分:1)

AFAIK,无法路由到视图。您可以将URL路由到控制器的操作。该操作负责呈现视图。

您可以使用命名空间路由将资源放在子文件夹中。

...

我想写的是@TuteC写的。只需按照该链接进行操作,是的,您可以根据他的解释获得特定于语言的内容。

答案 3 :(得分:0)

我已经为此苦苦挣扎了一段时间,终于找到了一个简单的解决方案:

config / routes.rb

get 'pages/:first/:second/:third' => 'pages#show'

然后在您的PagesController中

def show
    render "/pages/#{params[:first]}/#{params[:second]/#{params[:third]}"
end

然后在您的视图中将呈现以下任何内容:

pages/index => pages/index.html.erb
pages/index/en => pages/index/en.html.erb
pages/foo/bar/hello-world => pages/foo/bar/hello_world.html.erb

关于此的最好的事情是它很简单,您可以无限期扩展它。如果您只是在渲染基本模板,则可以轻松清理view文件夹。