0

いくつかの類似した特性を持ついくつかのmodels-views-controllersを備えたRailsアプリケーションがあります。たとえば、5つの異なるモデルにコメント、投票、またはタグ付けできます。また、外部プラグインを多用しています。

現時点では、コメント、投票、タグなどを1つのモデル(およびそのビューとコントローラー)にのみ導入しました。ただし、結果に満足しているので、あるモデルの特定のMVCからこの共通の機能を切り取り、他のすべてのモデルからアクセスできるようにします。

私がこれを始める前のいくつかの質問(そして多分いくつかの一般的なアドバイスも素晴らしいでしょう):

1-どうすればいいですか?「lib」ディレクトリにモジュールを作成し(ミックスインクラスと同じですか?)、再利用可能なビューコードを一般的なパーシャルに移動することを考えていました。コントローラコードはどうですか?

2-最初のモデルのコーディング中にRubyonRailsを学んでいたので、コントローラーに一連のメソッドを追加する方法がおそらく間違っていました。コメントを追加する(addcomment)、投票を追加する(addvote)などのメソッドがあります。これらのメソッドはすべて、:collectionを介した非標準(非RESTful)ルーティングを必要とします。私が理解していることから、正しい方法は、コメントコントローラー機能を独自のコントローラーに移動し、標準のRESTfulルートを介してアクセスすることです。これは私がすべきことですか?

3-多くのプラグイン(例:act_as_commentable)は、モジュールを明示的にロードする必要はなく、モデルのどこかに「act_as_commentable」という行をロードするだけです。共通の機能にこのようなものを使用できますか?それはどのように機能しますか?

4

2 に答える 2

3
  1. 簡単な方法は、コードをモジュールに分割してミックスインを使用することです。より良い方法は、共通のコード用に独自のプラグインを作成することです。act_as_commentable ここでそれについて学ぶことができるように:http: //guides.rubyonrails.org/plugins.html

  2. 正しい方法は、コメントコントローラーを実行し、それをモデルにネストして、/ mymodelname / 1/commentsのようなRESTfulルートを提供することです。このようなコントローラーを作成する簡単な方法は、inherited_resourcesプラグインを使用することです。[ポリモーフィックが属する]セクションまで下にスクロールします-コメントコントローラーの例があります

于 2009-08-22T17:55:37.530 に答える
2

For repeated model code, put it in a module in the lib directory.

For controller code, put your duplicate code in ApplicationController.

For your view code, use partials.

于 2009-08-22T17:30:50.870 に答える