Я новичок в Rails и просто задаюсь вопросом, когда я должен помещать код в помощника, а не вставлять код в модель.
Есть ли "правило большого пальца", так сказать?
Я новичок в Rails и просто задаюсь вопросом, когда я должен помещать код в помощника, а не вставлять код в модель.
Есть ли "правило большого пальца", так сказать?
Используйте помощники, если вы работаете в представлении (шаблоне), и вам нужно построить сложный бит 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
Лучше всего использовать помощники, когда код, созданный помощником, предназначен для отображения только в представлении. Например, если вы хотите иметь методы, которые помогают создавать 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
Помощники должны содержать только логику для представления
Модели должны содержать только логику, связанную с объектом, смоделированным, никогда не связанным с транзакцией, не выполняемой ни визуализацией вида