Ruby on rails 干燥Rails控制器中的继承方法

Ruby on rails 干燥Rails控制器中的继承方法,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,inheritance,model-view-controller,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,Inheritance,Model View Controller,我有一组基本的控制器,带有一组相当标准的RESTful方法。然后我有了第二套控制器来管理客户端微站点。第二组控制器与基本控制器几乎相同,只是每个用HTML响应的方法都需要一个额外的实例变量来表示要定义的微站点id(基本控制器不可用) 这意味着我在我的应用程序中重复了两次代码,这不是很容易维护的,特别是对于一个有很多控制器的大型应用程序。有没有一种方法可以告诉控制器继承一个方法,但是在继承的方法中插入一个额外的变量或其他逻辑 例如,如果我在下面有一个UsersController: class U

我有一组基本的控制器,带有一组相当标准的RESTful方法。然后我有了第二套控制器来管理客户端微站点。第二组控制器与基本控制器几乎相同,只是每个用HTML响应的方法都需要一个额外的实例变量来表示要定义的微站点id(基本控制器不可用)

这意味着我在我的应用程序中重复了两次代码,这不是很容易维护的,特别是对于一个有很多控制器的大型应用程序。有没有一种方法可以告诉控制器继承一个方法,但是在继承的方法中插入一个额外的变量或其他逻辑

例如,如果我在下面有一个UsersController:

class UsersController < ApplicationController
    def index
    end
end
class Clients::UsersController < UsersController
    def index
        @client_id = params[:id]
    end
end
class UsersController
然后我有Clients::userscoontroller您可能需要一个:

在您的控制器中

class UsersController < ApplicationController
    include DoSomething

    def index
      # Invoke shared code
      something
    end
end

class Clients::UsersController < UsersController
    include DoSomething

    def index
      @client_id = params[:id]

      # Invoke shared code
      something
    end
end
class UsersController
很难告诉您任何有用的信息,因为您忽略了所有相关的代码。在这一点上,我们可以建议“在一个方法中放置大量的流控制”,而不是其他什么。代码不是非常相关。这不是关于特定代码段的问题。这是一个关于设计模式的问题。我可以发布我的控制器的所有代码,但其中99%与问题无关,这就是我选择通用示例的原因。
class UsersController < ApplicationController
    include DoSomething

    def index
      # Invoke shared code
      something
    end
end

class Clients::UsersController < UsersController
    include DoSomething

    def index
      @client_id = params[:id]

      # Invoke shared code
      something
    end
end