3

ビュー/コントローラーでヘルパーがどのように機能するのかよくわかりません。私はそれらを使ったことがありません。

私の具体的な質問は、ほとんどすべてのビューがAJAXを実装しているということです。ほとんどのコントローラーでは、update.js.coffeecreate.js.coffeeに次のコードの形式があります。

jQuery ->
  <% if @product.errors.any? %>
  error_info = '<%= j(render :partial => "shared/errors", :locals => { :record => @product }) %>'
  popup error_info

  <% else %>
.
.
.

ここで、popupはいくつかの要素を表示するjavascript関数です。

これをヘルパーに抽象化する方法はありますか?これを行うための最良の方法は何ですか?@productこのコードは、問題のモデルによってもちろん2つの使用法が異なることを除いて、すべての場合でほぼ同じです。

これがヘルパーの用途ではない場合、1)ヘルパーは何に使用されますか?および2)代わりに何を使用する必要がありますか?

編集:ボーナス質問:実際、私の新しい、作成、編集、および更新機能の多くは、モデル間で類似しています。どうやってこれを乾かしますか?それともあなたはそれについて心配しませんか?

4

2 に答える 2

3

最初のステップは、ファイルの拡張子を.js.coffee.erb. これにより、アセット パイプラインは、ファイルを ERB で解釈する必要があることを認識できます。

2 つ目のオプションのステップは、Sprokets にカスタム ヘルパーを追加して、Coffee スクリプト ファイルから独自のメソッドを呼び出すことができるようにすることです*。新しいヘルパー モジュールを作成し、初期化子に登録するだけです。

Sprockets::Context.send :include, CoffeeHelper

*: アセットは、HTTP 要求の一部としてではなく、アセットのコンパイル時に実行されるため、使い慣れたすべてのヘルパーにアクセスできません。通常のコントローラー/ヘルパーのセットアップは存在しません。

于 2013-12-15T02:42:43.897 に答える
0

このコードを Rails ヘルパーにリファクタリングする場合は、他のヘルパー メソッドと同じように行います。すべての JavaScript コードを文字列として保持する必要があり、Rails ヘルパーは文字列を返す必要があります。

Rails ヘルパーは、ビューからロジックをリファクタリングするのに役立ちます。これにより、コードを可能な限りロジックレスに保つことができ、繰り返されるコードをより乾燥させることができます。

一部のコードがモデル間で繰り返されていることがわかった場合は、そのコードを lib ディレクトリの ruby​​ モジュールにリファクタリングし、そのモジュールをモデルに含めることも検討してください。

于 2012-07-11T04:38:29.137 に答える