Amr*_*ngh 4 ruby ruby-on-rails ruby-on-rails-5
我正在使用Rails 5,我想在我的项目中使用共享文件.我在网上搜索了这个,我得到了一些结果如下:
对于Rails 3
app/views/shared
Run Code Online (Sandbox Code Playgroud)
对于Rails 4
app/views/application
Run Code Online (Sandbox Code Playgroud)
但Rails 5没有任何内容.
我在谈论标准; 是否有任何特定的位置在Rails 5中添加常见的视图文件,就像我们在其他框架中一样?像在Laravel中有一个布局文件夹?
所有人都告诉你,普通视图文件没有"标准位置"是正确的.但是,如果您想询问Rails,如果您尝试在视图上渲染部分文件,它将寻找部分文件,只需获取您拥有的任何视图文件并渲染您知道不存在的部分文件.
如果你有一个UsersController
看起来类似的视图结构,app/view/users
你在任何视图上添加以下内容:
<%= render 'foo' %>
Run Code Online (Sandbox Code Playgroud)
您可能会收到类似以下内容的错误:
Missing partial users/_foo, application/_foo
Run Code Online (Sandbox Code Playgroud)
这意味着每当您尝试使用它的名称呈现部分而没有任何路径信息时,Rails将会查找它
users
application
目录下所以,我想你可以说Rails中普通视图文件的"默认位置"在application
目录下.
通过覆盖ActionView::ViewPaths.local_prefixes
混合到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
Run Code Online (Sandbox Code Playgroud)
现在,您的错误会说:
Missing partial users/_foo, shared/_foo, application/_foo
Run Code Online (Sandbox Code Playgroud)
这表明Rails会在查看shared
目录之前检查目录的部分内容application
.
请注意,此方法覆盖应该在两个控制器中发生,否则local_prefixes
in UsersController
get继承ApplicationController
并最终得到重复的查找路径,如下所示:
shared/_foo, users/_foo, shared/_foo, application/_foo
Run Code Online (Sandbox Code Playgroud)
如果所有这些都太费力/太奇怪,正如其他人指出的那样,在呈现部分时,您总是可以手动指定共享的部分目录:
<%= render 'shared/foo' %>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1311 次 |
最近记录: |