2011-01-24 5 views
15

Я ищу примеры хороших практик при использовании Rails.Хорошая практика Rails

У меня есть несколько таких, как:

  • before_filter вызовы идут под декларацией имя класса контроллера, больше нигде.
  • Базовые контроллеры для пространства имен называются BaseController, а не ApplicationController. Существует и должно быть навсегда только одно ApplicationController.
  • attr_* Методы определены в верхней части их соответствующих классов.
  • Обратные вызовы модели идут после attr_* методов или в верхней части модели.
  • Проверки выполняются в верхней части модели, при этом пользовательские методы проверки определяются как методы private в нижней части файла.

Теперь я не ищу хороших практик Ruby, но больше перечисляет их в Rails. Те, что перечислены выше, являются лишь примером, а не Евангелием.

* Я не хотел использовать термин «лучшие практики», как лучше всего подразумевает конечный, и во всем кодексе люди могут не согласиться.

+12

Я думаю, что это лучше, чем сообщество вики с политикой «одна практика за ответ», чтобы люди могли проголосовать за свою любимую практику. – edgerunner

+0

Используйте больше ООП. Отклонитесь от «Жирной модели». – Zabba

ответ

3

Одна из практик, которую я считаю довольно последовательной, - это когда круглые скобки являются подходящими. Макросы класса DSL, такие как проверки и ассоциации, кажутся естественными без них, тогда как методы с явным приемником и аргументом (-ами) кажутся лучше с ними.

has_many :users 

User.find_all_by_field(my_var) 

против

has_many(:users) 

User.find_all_by_field my_var 
3
  1. Я положил attr_accessible* после has_* декларации.
    Я помню, как ошибались ошибки, если я не заявлял их в вышеуказанном порядке. (Я буду воссоздавать эту проблему завтра и подтвердить)

    Пробовал это:

    Работы:

    has_one :something 
    accepts_nested_attributes_for :something 
    

    Но это бросает ошибку:
    No association found for name 'something'. Has it been defined yet?:

    accepts_nested_attributes_for :something 
    has_one :something 
    

    Я думаю, , причина, по которой я получаю эту ошибку, заключается в том, что я использую something в scope до has_one звонок.

  2. Если вы @posts.something и получить nil ошибки в представлении (например, индекс), но вы знаете@posts = Post.find в акции индекса работает, сделать вдвойне уверенным вы не имеете другой (скорее всего, пустой) def index где-нибудь (скорее всего, ниже) в коде класса контроллера!

+1

У меня никогда не было проблемы с объявлением защищенных/доступных атрибутов выше моих ассоциаций. –

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