我使用继承来干掉控制器代码。
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
如果我在ItemsController中添加'clone'动作,则错误就会消失。
class ItemsController < MastersController
def clone
...
...
end
end
如何在Rails Controller中抽象自定义操作?
答案 0 :(得分:2)
您可以像这样使用
def clone
super
end
在您的孩子控制器中
答案 1 :(得分:0)
无法将clone
用作从父控制器继承的操作。除了ApplicationController
之外,MastersController
也是如此。
将您的操作重命名为copy
,然后您就可以在MastersController
中对其进行定义并正确路由至ItemsController#copy
。
请注意,我不能告诉你为什么会这样。有一个Ruby方法clone
,它在Object
类上定义。我怀疑这就是原因 - 也许有更多知识的人可以解释。