假设系统有三种角色的用户(甚至更多),分别是 Foo、Bar、Baz,系统有 Post 模型,三种角色都要对 Post 数据进行 CRUD 处理,相同动作(例如 index)相互之间展示的样式也不同
我能想到的组织代码的方法有两种
第一种,创建一个posts_controller如下
# posts_controller.rb
# ...
def index
  if is_foo?
    get_posts_for_foo
    render foo_posts
  elsif is_bar?
    get_posts_for_bar
    render bar_posts
  elsif is_baz?
    get_posts_for_baz
    render baz_posts
  end
end
# ...
第二种,如下树形结构为每个角色创建单独的posts_controller.rb,然后再在其对应的 controller 中维护单独的逻辑
controllers
  |
  foo
    |
    posts_controller.rb
  |
  bar
    |
    posts_controller.rb
  |
  baz
    |
    posts_controller.rb
第一种方法,逻辑一旦复杂,角色一多的话,即使把该封装的语句封装成方法,action 的代码也会越来越多;第二种方法又会出现很多 DRY
所以想请教下大家,觉得这两种方法哪种更好,还是有更好的方法?