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

Geo*_*ath 6 controller ruby-on-rails ruby-on-rails-4

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

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

  ...
  ...
end

class ItemsController < MastersController
end
Run Code Online (Sandbox Code Playgroud)

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

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

  ...
  ...

  def clone
    ...
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

我添加了项目的路线

resources :items do
  get :clone
end
Run Code Online (Sandbox Code Playgroud)

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

AbstractController::ActionNotFound at /items/1/clone
The action 'clone' could not be found for ItemsController
Run Code Online (Sandbox Code Playgroud)

截图

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

class ItemsController < MastersController
  def clone
    ...
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

如何在Rails控制器中抽象自定义操作?

小智 0

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

将您的操作重命名为copy,您将能够在 中定义它MastersController并正确路由到ItemsController#copy.

请注意,我无法告诉你这是为什么。clone该类中定义了一个 Ruby 方法Object。我怀疑这就是原因 - 也许有更多知识的人可以解释。