2014-10-25 4 views
-1

У меня есть несколько функций, которые обезьяна исправляет класс строк в файле с именем string_class.rb, который в настоящее время помещается в config\initializers\string_class.rb. Код выглядит следующим образом:rails 4 lib папка против папки инициализаторов

class String 

    def capitalize_first_char 
    self.sub(/^(.)/) { $1.capitalize } 
    end 

    def capitalize_each_sentence 
    self.gsub(/([a-z])((?:[^.?!]|\.(?=[a-z]))*)/i) { $1.upcase + $2.rstrip } 
    end 

end 

После этого совсем немного исследований я на заборе, если этот класс должен жить в инициализаторах или Lib папку. Поэтому я обращаюсь к своим коллегам-гикам за ответами на это и немного руководства.

+1

Как и в сторону, те бедные кандидаты для исправления в строку. Они (предположительно) предназначены исключительно для показа. Вы должны просто написать вспомогательные функции в 'app/helpers/* _ helper.rb'. – meagar

+0

@meagar Я бы хотел, чтобы они были доступны во всех контроллерах и представлениях, так что помощники были бы в порядке? –

+0

Нет, это довольно нормальное требование для помощников. Если ваши контроллеры нуждаются в них, вы просто определяете метод в 'ApplicationController'. Это делает их доступными для всех контроллеров, чем наследует ваш 'ApplicationController', который должен быть всеми из них. Затем укажите, что они являются вспомогательными методами с помощью ['helper_method: capitalize_first_char,: capitalize_each_sentence'] (http://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method), и они также будут доступны во всех представлениях , – meagar

ответ

1

Нельзя найти подходящее место для работы в приложении Rails, потому что это не то, что вам нужно делать при нормальном ходе создания приложения Rails. Исключение основных классов составляет expressly advised against в почти каждом руководстве по стилю.

  • config/initializers, вероятно, не то подходящее место для этого. Как правило, это для настройки зависимостей для вашего приложения, и большинство людей не будет думать, искать там код смешивания странные методы в основные классы
  • lib, вероятно, лучшее место, но это не автоматически перезагружается по умолчанию
  • Gemfile? Если это стоит запланировать до String, возможно, стоит перегнать в самоцвет и тщательно документировать.

Я лично обойду проблему и попробую ввести вспомогательные методы. Вы можете сделать вспомогательные методы доступными для всех контроллеров, определив их в app/controllers/application_controller.rb. Вы можете сделать методы, доступные для вашего мнения с функцией helper_method:

class ApplicationController < ActionController::Base 

    helper_method :capitalize_first_char, :capitalize_each_sentence 

    #... 

    protected 

    def capitalize_first_char(str) 
    str.sub(/^(.)/) { $1.capitalize } 
    end 

    def capitalize_each_sentence(str) 
    str.gsub(/([a-z])((?:[^.?!]|\.(?=[a-z]))*)/i) { $1.upcase + $2.rstrip } 
    end 
end 
+0

Мне нравится, где это происходит, но у вас есть последний вопрос. Будут ли эти помощники принадлежать Контроллеру приложений или они могут войти в помощник приложения? –

+0

@meager Я получил его на работу, у меня была плохая копия и вставка. Спасибо за помощь в этом. –

+1

@chrishough Методы ApplicationHelper недоступны в contorller, они предназначены только для просмотров. Если вам нужны они как в контроллере, так и в представлении, они должны войти в контроллер и быть предоставлены в представление через 'helper_method'. – meagar

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

  • Нет связанных вопросов^_^