7

谁能阐明如何路由您的子文件夹的 .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

路线:

在此处输入图像描述

4

4 回答 4

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?这将开箱即用。

于 2012-11-05T15:05:55.673 回答
2

更新 这是 route.rb 的工作原理:-

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

在您的控制器上渲染它:-

def index
  render "pages/en/index"
end

def about
  render "pages/#{params[:lang]}/about"
end
于 2012-11-05T18:31:16.507 回答
1

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

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

...

我想写的东西已经由@TuteC 写了。只需点击该链接,是的,正如他解释的那样,您可以开箱即用地获得特定于语言的东西。

于 2012-11-05T15:08:32.450 回答
1

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

配置/路由.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

最好的一点是它很简单,您可以无限期地扩展它。如果您所做的只是渲染基本模板,则可以轻松清理视图文件夹。

于 2018-09-20T02:56:14.790 回答