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' %>
我正在使用 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' %>