質問

現在、私の景色の中でいくつかの計算を行い、もちろん、

<% categories.each do |c| %>
  ....
    <%= c.transactions.sum("amount_cents") %>
  ....
<% end %>
.

私は上記の問題をリファクタリングするのに役立つ方法を研究しています。

計算を私のコントローラーに移動することです

@category_sum = @transaction.sum("amount_cents")
.

はおそらくより良い解決策ですが、あなたは知っています。完璧ではありません。

多くのユーザーがいますので、電卓ロジックを自分のモデルに移動できますか。だから私は新しいクラスを使う必要があるかもしれないと思います。私は正しいトラックにいますか?コードとデザインを再構築し、このクラスを実装する方法についてのアドバイスに感謝します。

役に立ちましたか?

解決

ビューロジックを分離するための1つの平均は、プレゼンターを使用することです。

発表者はあなたがそのようなことをすることを可能にします:

<% categories.each do |c| %>
  ....
    <% present c do |category| %>
    <%= category.transaction_sum %>
    <% end %>
  ....
<% end %>
.

app/presenters/category_presenter.rbにプレゼンタークラスを持っています:

class CategoryPresenter < BasePresenter
  presents :category

  def transaction_sum
    category.transactions.sum("amount_cents")
  end
end
.

もちろん、その発表者に多くのメソッドがある場合に最適です(ただし、ビューロジックの減少を開始すると、プレゼンターを埋めるのが早く)。

ここで使用されている実装は、このPro RailScast 。基本的な考え方は、オブジェクトクラスに基づいてクラス名を扱う#presentヘルパーを持つことです。

他の人気の代替案は、デコレータの概念を使用するが、プレゼンターは基本的にデコレータである。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top