【问题标题】:how to route your sub-folder in views Ruby on Rails?如何在 Ruby on Rails 视图中路由您的子文件夹?
【发布时间】:2012-10-25 10:25:45
【问题描述】:

谁能解释一下如何路由您的子文件夹的 .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

路线:

【问题讨论】:

  • 你在哪里得到这个错误?发布回溯
  • 请不要编辑问题的答案。在下面发布与答案相同的内容,并将其标记为已接受。

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


【解决方案1】:

命名空间会将您的代码和视图组织在子文件夹中: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?开箱即用。

【讨论】:

  • 只是因为我将有另一个文件夹,例如“es”,其中包含带有相关翻译的 .html.erb 文件。我可以使用国际化 API,但根据规范必须这样做!
  • 刚刚添加了一种以这种方式组织视图的更快方式。
  • 再一次,我根本不需要使用翻译 API,目前它只是静态路由到文件夹,例如 'en'(英语)、'es'(西班牙语)、' de'(德语)在视图中->页面->'en''es''de'等
  • 哦,好的。无论如何作为示例,如果您将适当的字符串传递给 render 操作,您可以呈现任何视图。最好的!
【解决方案2】:

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

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

...

我想写的已经由@TuteC 写了。只需点击该链接,是的,您可以按照他的解释开箱即用地获取特定于语言的内容。

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      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
      

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

      【讨论】:

        猜你喜欢
        • 2014-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-07
        • 2015-05-15
        相关资源
        最近更新 更多