我为视图嵌套了分类文件夹,例如:主类“Baby”has_many子类“Boy”,“Girl”,“Alien”等,它们在婴儿视图的子文件夹中有相应的视图: “app / views / babies / boys”,“app / views / babies / girls”......
Rails默认不识别视图的子文件夹,所以我在控制器中使用了before_action hook,例如:
class BoysController < ApplicationController
before_action :subfolderview, except: [:create, :destroy, :update]
...
private
def subfolderview
prepend_view_path Rails.root + 'app' + 'views/babies'
end
end
还有一种我所知道的方式:
render :template => "babies/boys/..."
我可以以某种方式配置application.rb来完成所有工作吗?喜欢(两者都不起作用):
config.autoload_paths += Dir[Rails.root.join('app', 'views', 'babies', 'boys', '{*/}')]
或:
config.autoload_paths += Dir[Rails.root.join('app', 'views', 'babies', '{*/}')]
我认为应该有办法做helper_method或其他一些我尚未承认的功夫,但在谷歌找不到它。请帮帮我。
答案 0 :(得分:0)
正如Fallenhero上面提到的,路由就是这样做的方式。
config/routes.rb
:
namespace :babies do # /babies/boys, /babies/girls, /babies/aliens
resources :boys, :girls, :aliens
end
类BoysController / GirlsController / etc应该包含在Babies Module:
中module Babies
class BoysController < ApplicationController
# ...
end
end
相应的文件移入子文件夹,如:
app/controllers/babies/boys_controller.rb
相应的布局文件夹也会进入子文件夹:
app/views/babies/boys
ps:这样做路线/路线会改变:boys
/ edit_boy
/等。将成为babies_boys
/ edit_babies_boy
/ etc。