我正在使用Rails 5,我想在我的项目中使用共享文件。我在网上搜索了这个,我得到了一些结果如下:
对于Rails 3
app/views/shared
对于Rails 4
app/views/application
但Rails 5没有任何内容。
我在谈论标准;是否有任何特定的位置在Rails 5中添加常见的视图文件,就像我们在其他框架中一样?像在Laravel中有一个布局文件夹?
答案 0 :(得分:6)
所有人都告诉你没有"标准位置"对于常见的视图文件是正确的。但是,如果您想要询问Rails,如果您尝试在视图上渲染部分文件,它会在哪里查找部分文件,只需获取您拥有的任何视图文件并渲染您知道不存在的部分文件。
如果你有一个UsersController
的视图结构看起来像app/view/users
,你可以在任何视图上添加以下内容:
<%= render 'foo' %>
您可能会收到类似以下内容的错误:
Missing partial users/_foo, application/_foo
这意味着每当您尝试使用它的名称呈现部分而没有任何路径信息时,Rails会查找它
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' %>
那就是它。希望这会对你有所帮助。