Draper是一個(gè)用來增強(qiáng)Rails應(yīng)用的庫,它使得你可以更好的組織你的視圖邏輯,同時(shí)也使得你的視圖邏輯更加可重用,更加簡潔。
預(yù)先準(zhǔn)備: 我們將演示使用Draper和active_record_query_trace gems實(shí)現(xiàn)查詢?nèi)罩居涗浐蚔iew Decorator。gem 'draper', '~>4.0' gem 'active_record_query_trace'
首先,讓我們來創(chuàng)建一個(gè)人的模型,之后我們將會(huì)使用Draper來添加類似性別這種邏輯。
rails g model Person first_name:string last_name:string gender:integer rails db:migrate
之后我們來創(chuàng)建draper的decorator,名字跟person保持一致。
rails g decorator Person
現(xiàn)在打開person_decorator.rb文件,我們將添加一個(gè)方法去展示性別。首先我們來添加一個(gè)方法去展示一個(gè)完整名字,即姓和名的結(jié)合。
class PersonDecorator< Draper::Decorator delegate_all def full_name "#{object.first_name} #{object.last_name}" end end
現(xiàn)在我們來添加一個(gè)方法去展示性別。我們?yōu)镻erson model添加了一個(gè)gender屬性(0:女,1:男)。
class PersonDecorator< Draper::Decorator delegate_all def full_name "#{object.first_name} #{object.last_name}" end def gender object.gender == 0 ? 'Female' : 'Male' end end
現(xiàn)在我們可以使用Draper來在視圖中展示人物的完整名字,以及性別。
<%= @person.decorate.full_name %>
Gender:<%= @person.decorate.gender %>
最后我們來看看如何使用active_record_query_trace記錄查詢的日志,此日志將會(huì)記錄每一條查詢,以及查詢所用時(shí)間。
Rails.application.configure do config.active_record_query_trace.enabled = true end
到這里,我們已經(jīng)成功的使用了Draper和active_record_query_trace gems,增強(qiáng)了Rails應(yīng)用。