2
,所以我得在多個控制器視圖方法,它主要是長得一模一樣:重構「呈現格式」中的多個控制器
def show
show! do |format|
format.json do
if @text.activated?
@text.log
render_for_api :texts_all, :json => @text
else
render :nothing => true
end
end
format.pdf do
pdf = QrPdf.new(@text)
send_data pdf.render, filename: "text_#{@text.id}.pdf", type: "application/pdf"
end
end
end
該模型是不同的,但它們都具有相同的屬性用於此方法(activated
,log
,id
)。我也可以改變render_for_api
給定的散列,從目前的texts_all
,documents_all
等哈希,其無處不在。
有沒有一種方法可以在多個模型中使用此代碼而不會有這種巨大的重複?
我很感謝每一個提示! 特別是我覺得很難處理do |format|
塊。但我也不確定在哪裏放置代碼以及如何將它用於不同類型的模型。
謝謝。
這將是我的答案!根據您的應用程序的大小/複雜程度,我將其作爲私有方法放入ApplicationController –
'show!'來自inherited_resources gem(https://github.com/josevalim/inherited_resources)。 沒關係,所以你認爲我可以把它放在我的application_controller.rb裏面。每一個控制器都從這個繼承,這是個好主意? – choise
@choise在那裏,或者你自己的基礎控制器 - 但它看起來像'inherited_resources'有它自己的基類,所以你的應用程序控制器將需要擴展,如果它尚未。也不知道基類方法的作用('!'方法),所以你需要確保它與任意模型兼容。 –