Когда использовать Helpers vs Model - PullRequest
31 голосов
/ 16 февраля 2011

Я новичок в Rails и просто задаюсь вопросом, когда мне следует поместить код в Помощник, а не вводить код в Модель.

Существует ли так называемое «практическое правило» для этого?

Ответы [ 3 ]

27 голосов
/ 16 февраля 2011

Используйте помощников, если вы работаете в представлении (шаблоне), и вам нужно создать сложный фрагмент HTML, такой как <table>.Или, если вы хотите изменить некоторые данные презентации, которые не подключены к базе данных.

def truncate_html( html, options = {} )
  options[:length] = 35 unless options[:length]
  truncate( strip_tags( html ), options )
end

Используйте модели при работе с объектами базы данных и хотите упростить бизнес-логику.

  def one_day?
    start_date.to_s[0,9] == end_date.to_s[0,9]
  end  

Вот помощников в руководствах: http://guides.rubyonrails.org/form_helpers.html

А вот Модели : http://guides.rubyonrails.org/active_record_querying.html

6 голосов
/ 16 февраля 2011

Лучше всего использовать помощники, когда код, который создает помощник, предназначен для отображения только в представлении.Например, если вы хотите иметь методы, которые помогают создавать HTML-ссылки, они должны идти в помощнике:

def easy_link user
  link_to(user.name, user)
end

Если ваш код - бизнес-логика, он должен идти в ваших моделях.Вы также должны стремиться использовать как можно больше бизнес-логики в своих моделях, чтобы этот код не использовался в ваших представлениях и контроллерах.Например, если вы хотите обработать заказ, этот код должен идти в модели:

def process
  raise NotReadyToProcess unless ready_to_process?
  raise NotValidPaymentDetails unless valid_payment_details?
  process_payment
end
3 голосов
/ 16 февраля 2011

Помощники должны содержать только логику для представления

Модели должны содержать только логику, относящуюся к моделируемому объекту, никогда не связанную с выполненной транзакцией, а также представление, отображаемое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...