在Rails 5中添加共享视图文件的位置?

时间:2016-08-02 09:35:46

标签: ruby-on-rails ruby ruby-on-rails-5

我正在使用Rails 5,我想在我的项目中使用共享文件。我在网上搜索了这个,我得到了一些结果如下:

对于Rails 3

app/views/shared

对于Rails 4

app/views/application

但Rails 5没有任何内容。

我在谈论标准;是否有任何特定的位置在Rails 5中添加常见的视图文件,就像我们在其他框架中一样?像在Laravel中有一个布局文件夹?

2 个答案:

答案 0 :(得分:6)

所有人都告诉你没有"标准位置"对于常见的视图文件是正确的。但是,如果您想要询问Rails,如果您尝试在视图上渲染部分文件,它会在哪里查找部分文件,只需获取您拥有的任何视图文件并渲染您知道不存在的部分文件。

如果你有一个UsersController的视图结构看起来像app/view/users,你可以在任何视图上添加以下内容:

<%= render 'foo' %>

您可能会收到类似以下内容的错误:

Missing partial users/_foo, application/_foo

这意味着每当您尝试使用它的名称呈现部分而没有任何路径信息时,Rails会查找它

  • 首先在当前控制器的view目录下,在本例中为users
  • 然后在application目录下

所以,我想你可以说&#34;默认位置&#34;在Rails中,公共视图文件位于application目录下。

可以添加此功能,以便创建应用程序自己的标准位置&#34;通过覆盖混合到Rails中每个控制器的ActionView::ViewPaths.local_prefixes私有类方法来获取公共视图文件:

class ApplicationController < ActionController::Base
  def self.local_prefixes
    ['shared', controller_path]
  end
  private_class_method :local_prefixes
end

class UsersController < ApplicationController
  def self.local_prefixes
    [controller_path]
  end
  private_class_method :local_prefixes
end

现在,您的错误会说:

Missing partial users/_foo, shared/_foo, application/_foo

表明Rails在查看shared目录之前会检查application目录中的部分内容。

请注意,此方法覆盖应发生在两个控制器中,否则local_prefixes中的UsersController将继承自ApplicationController,并最终导致重复查找路径看起来像:

shared/_foo, users/_foo, shared/_foo, application/_foo

如果所有这些都太费力/太奇怪,正如其他人所指出的那样,在呈现部分时,您总是可以手动指定共享的部分目录:

<%= render 'shared/foo' %>

答案 1 :(得分:4)

您可以在app/views目录中创建新目录,并在该目录中添加您的共享文件。 例如:

app/views/shared # Contains all shared/partial pages

现在在app/views/shared目录中创建您的部分页面 喜欢:app/views/shared/_my_shared_view.html.erb

现在,如果您想在任何视图中使用此共享视图,只需添加以下代码。

<%= render :partial => 'shared/my_shared_view' %>

那就是它。希望这会对你有所帮助。