2016-08-31 2 views
0
Controllers 
-concerns 
    -application_controller.rb 
    -display_controller.rb 

Helpers 
-application_helper.rb 
-display_controller.rb 

В display_helper.rbRails: контроллер не может найти метод в accroding вспомогательный файл

module DisplayHelper 
     def is_c 
      a + b 
     end 
    end 

В display_controller.rb

class DisplayController < ApplicationController 
    include ApplicationHelper 
    include DisplayHelper 

    def update 
     @c = is_c 
    end 

end 

Проблема заключается в том, хочу ли я @c = is_c в обновление работы действий , Я должен сделать include DisplayHelper в контроллере, иначе результат is_c не может быть назначен на @c. Обычно метод в вспомогательном файле может использоваться в контроллере accroding без включения, но для этого ресурса, почему он не работает?

+0

помощники предназначены для просмотра, если вам нужно включить это в контроллер, если для этого доступны методы 'include' или' helper'. Это говорит о том, что я не очень верю в полезность «помощников», поскольку они могут создать глобальную двусмысленность. – engineersmnky

+0

@engineersmnky Спасибо за ваш ответ. По мере того, как мое приложение становится более сложным, коды в контроллере также становятся тупиковыми, знаете ли вы, как уменьшить коды в контроллере, если я не перемещу их вспомогательный файл? –

+0

Возможно, один из самых полезных сообщений в блоге для шаблонов проектирования SRP в рельсах http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ – engineersmnky

ответ

0

Если вы используете свой модуль таким образом, вам нужно вызвать is_c на экземпляр. Это означает, что вам придется включать DisplayHelper в класс, связанный с этим экземпляром.

, если вы не хотите назвать это на примере, то вы можете определить is_c на СЕБЕ:

Попробуйте это:

module DisplayHelper 
     def self.is_c 
      a + b 
     end 
end 

В контроллере:

DisplayHelper.is_c 

Если вы не понимаете только комментарий, и я попытаюсь объяснить. Надеюсь, все это имеет смысл.

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