1

私は3つのモデルを持っています。

  • users_controllers.rb
  • communitys_controller.rb
  • community_tipics_controller.rb

check_digitという関数を使用しています

def checkdigit
 (transaction)
end

これをすべてのコントローラーに配置し、before_filterで呼び出します。
しかし、上記のまったく同じコードをすべてのコントローラーに貼り付けているだけなので、無駄になっていると思います。

コントローラーが共通して使用している場合、どこに置くべきですか?
これをcontrollers/application_controller.rbに入れる必要がありますか?

4

3 に答える 3

2

これを行うにはいくつかの方法がありますが、いくつかの可能な方法は次のとおりです(私がこれを行う場合)

1番目の方法

これがapplication_controller.rb内のコントローラーによって使用される単純なメソッドである場合

private
def checkdigit
 (transaction)
end

2番目の方法

関数が特定のカテゴリで使用されている場合(これは通常、私が頻繁に行うことです)、別のコントローラーを作成し、他のすべてのコントローラーを継承させます

例:あなたのメソッドが私の管理者だけを使用していて、そのようなメソッドが他にもあると仮定した場合

class AdminController < ApplicationController
   layout 'admin'

   private
   def checkdigit
     (transaction)
   end

end

and

class UsersController < AdminController

end

3番目の方法

あなたのメソッドがモデル/コントローラーなどで使用されている/使用される予定の場合は、モジュールにすることを検討してください

module CommonMethods
   def checkdigit
     (transaction)
   end
end

class UsersController < ApplicationController
    include CommonMethods 
end

HTH

于 2012-12-29T19:22:16.680 に答える
1

あなたはそれを入れることができますhelpers/application_helper.rb

于 2012-12-29T18:56:34.117 に答える
1

正解です。すべてのコントローラーに必要なすべての一般的なメソッドをに保存する必要がありますApplicationController

さらに、このコントローラー内のすべてのコントローラー間で共通のロジックを維持する必要もあります。

編集:
彼らが単なるヘルパーである場合、あなたは彼らをヘルパーが行くところに置くでしょう、@simoneによる答えを見てください。

于 2012-12-29T18:56:37.297 に答える