Rails控制器 - 继承自定义操作

时间:2014-03-26 13:37:04

标签: ruby-on-rails ruby-on-rails-4 controller

我使用继承来干掉控制器代码。

class MastersController < ApplicationController
  def index
    ...
    ...
  end

  ...
  ...
end

class ItemsController < MastersController
end

现在我已经向MastersController添加了一个自定义动作

class MastersController < ApplicationController
  def index
    ...
    ...
  end

  ...
  ...

  def clone
    ...
    ...
  end
end

我添加了项目

的路线
resources :items do
  get :clone
end

现在,当我尝试访问myapp.dev/items/1/clone时,出现错误

AbstractController::ActionNotFound at /items/1/clone
The action 'clone' could not be found for ItemsController

Screenshot

如果我在ItemsController中添加'clone'动作,则错误就会消失。

class ItemsController < MastersController
  def clone
    ...
    ...
  end
end

如何在Rails Controller中抽象自定义操作?

2 个答案:

答案 0 :(得分:2)

您可以像这样使用

   def clone
     super
   end

在您的孩子控制器中

答案 1 :(得分:0)

无法将clone用作从父控制器继承的操作。除了ApplicationController之外,MastersController也是如此。

将您的操作重命名为copy,然后您就可以在MastersController中对其进行定义并正确路由至ItemsController#copy

请注意,我不能告诉你为什么会这样。有一个Ruby方法clone,它在Object类上定义。我怀疑这就是原因 - 也许有更多知识的人可以解释。