Rails:有没有更好的方法来预先添加视图路径而不是before_action hook?

时间:2016-12-18 21:10:59

标签: ruby-on-rails

我为视图嵌套了分类文件夹,例如:主类“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或其他一些我尚未承认的功夫,但在谷歌找不到它。请帮帮我。

1 个答案:

答案 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。