Подтвердить что ты не робот

Когда использовать Helpers vs Model

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

Есть ли "правило большого пальца", так сказать?

4b9b3361

Ответ 1

Используйте помощники, если вы работаете в представлении (шаблоне), и вам нужно построить сложный бит 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

Ответ 2

Лучше всего использовать помощники, когда код, созданный помощником, предназначен для отображения только в представлении. Например, если вы хотите иметь методы, которые помогают создавать 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

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

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