はので、私はほとんどまったく同じに見える複数のコントローラのビュー方式持っている複数のコントローラで「フォーマットをレンダリングする」:このためリファクタリングは
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
)で使用されています。私はtexts_all
、documents_all
等の現在のハッシュからrender_for_api
のハッシュを変更して、どこでも同じハッシュにすることができます。
このコードを複数のモデルで使用するには、このような重大な重複がありませんか?
すべてのヒントに感謝しています! 特に、私はdo |format|
ブロックを扱うのが難しいと感じます。しかし、私はコードをどこに置くべきか、異なるタイプのモデルでどのように使用するのかは分かりません。
ありがとうございました。
それも私の答えでした!あなたのアプリケーションのサイズ/複雑さに応じて私はPrivateControlとしてApplicationControllerにドロップするだけです –
'show!'はinherited_resources gem(https://github.com/josevalim/inherited_resources)から来ます。 私はapplication_controller.rbの中に入れることができると思いますか?すべてのコントローラはこれを継承しています。良いアイデアですか? – choise
@choiseそこに、またはあなた自身のベースコントローラ - しかし、 'inherited_resources'はそれ自身の基本クラスを持っているように見えるので、あなたのアプリケーションコントローラはそれを拡張する必要があります。また、基本クラスのメソッド( '!'メソッド)が何をしているのかわからないので、それが任意のモデルと互換性があることを確認する必要があります。 –