2015-06-26 7 views
0

У меня есть модуль, который добавляет некоторые функции ActionController :: Base. Я включил его, и он работает для некоторых вещей. В частности, UsersController.been_extended возвращает true. Если я переопределяю создание в UserController, то также работает form_params. Проблема в том, что всякий раз, когда я пытаюсь создать нового пользователя, он говорит, что действие action не удалось найти для UserController.Расширение ActionController только частично работает в ruby ​​on rails

module RailsExtender 
    module ActionControllerExtension 
    extend ActiveSupport::Concern 

    def create 
     @obj = do_create 
     # more stuff here 
    end 

    private 
    def form_params 
     fields = self.model.fieldset({ 'create' => 'new', 'update' => 'edit' }.fetch(params[:action], params[:action])) 
     params.require(self.model.to_s.to_sym).permit(*fields) 
    end 

    module ClassMethods 
     def been_extended # just for testing purposes 
     true 
     end 
    end 
    end 
end 

ActionController::Base.send(:include, ActionControllerExtension) 

И это мой контроллер, который я пытаюсь создать.

module Auth 
    class UsersController < ApplicationController 
    @model = User 
    end 
end 

Почему он не думает, что создание существует?

ответ

1

Вместо обезьяны подключая его ActionController :: Base, как вы делаете здесь:

ActionController::Base.send(:include, ActionControllerExtension) 

Смешайте его в ApplicationController, как это:

class ApplicationController < ActionController::Base 
    include ActionControllerExtension 
    # ... 
end 

Мое подозрение, что ActionController :: База черный список всех своих методов по соображениям безопасности. Только подклассы ActionController :: Base (т. Е. Ваш ApplicationController и т. Д.) Могут определять действия.

Смежные вопросы