Rails 5 中在哪里添加共享视图文件?

Where to add shared view files in Rails 5?

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

对于Rails 3

app/views/shared

对于Rails 4

app/views/application

但是 Rails 5.

什么都没有

我说的是标准; Rails 5 中有没有特定位置可以像我们在其他框架中一样添加公共视图文件?就像在 Laravel 中有一个布局文件夹?

您可以在 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' %>

就是这样。希望对您有所帮助。

所有告诉您没有 "standard location" 通用视图文件的人都是正确的。但是,如果你想问 Rails 如果你试图在视图上渲染一个部分文件,它会去哪里寻找一个部分文件,只需使用你拥有的任何视图文件并渲染一个你知道不存在的部分文件。

如果您有一个 UsersController,其视图结构类似于 app/view/users,您可以在任何视图中添加以下内容:

<%= render 'foo' %>

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

Missing partial users/_foo, application/_foo

这意味着每当您尝试仅通过其名称而不使用任何路径信息来呈现部分内容时,Rails 都会查找它

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

所以,我猜你可以说 Rails 中的 "default location" for common view files is under the application directory.

可以添加此内容,以便通过覆盖混合到每个控制器中的 ActionView::ViewPaths.local_prefixes 私有 class 方法,为通用视图文件创建您的应用程序自己的 "standard location" Rails:

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 将在查找 application 目录之前检查 shared 目录的部分内容。

请注意,此方法覆盖应该发生在 两个 控制器中,否则 UsersController 中的 local_prefixes 将从 ApplicationController 继承,而您最终得到看起来像这样的重复查找路径:

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

如果这一切太过分了 effort/too 奇怪,正如其他人所指出的,您总是可以在渲染部分时手动指定您的共享部分目录:

<%= render 'shared/foo' %>