1

私は現在、HartlのRailsチュートリアルを行っており、最初の10章ほどで、ほとんどのアクション/メソッドをコントローラーに配置するという慣習に慣れてきました。現在、本がマイクロポストのメソッドを調べて定義してfeedいるので、メソッドは代わりにUser.rb モデルとともに配置されます。私はレールの世界(および一般的なプログラミング)に比較的慣れていないので、この方法(以下にコピー)をモデルに入れるための理論的根拠または慣習は何であるか疑問に思いましたか?

User.rbモデルに配置されたメソッド:

  def feed
    # This is preliminary. See "Following users" for the full implementation.
    Micropost.where("user_id = ?", id)
  end
4

2 に答える 2

2

実際には、どのコードをどこに配置するかについてかなりの論争がありますが、一般的に、従うべき簡単なガイドラインがいくつかあります。

メソッドは、基礎となるデータ構造についてある程度の詳細を知る必要がありますか?モデルに入れます。

これを判断する簡単な方法は、データベース内のfind、where、または特定の列などのActiveRecordメソッドを使用する場合です。このロジックをモデルに保持することにより、基になるデータストアを変更する必要がある場合は、モデルを変更するだけで済みます。

このメソッドには、ページがどのようにレンダリングされるかについての意見がありますか?コントローラーに入れます。

一般に、コントローラーはかなり薄く、データをビューにプッシュし、フォームデータをモデルに保存する必要があります。

(私が正しく覚えていれば)Hartlは非Railsクラスについては取りませんが、Rails構造の外に「ビジネスロジック」を置くことを恐れないでください。app/libまたはapp/servicesまたはapp/xディレクトリを作成し、そこにプレーンな古いrubyオブジェクトを配置できます。これをコントローラーやモデルから呼び出して、得意なことを処理できます。

于 2012-12-28T02:18:27.793 に答える
2

可能な限りモデルに「押し上げる」ことを目指してください。そうすれば、繰り返される回数が減り、より多くの人が利用できるようになります。ActiveRecordデータベーステーブルのモデルだけを使用しないでください。

多くの場合、モデルの単体テストを簡単に行うことができます。

共有されるものを置くための別の「次の」場所は/lib

于 2012-12-28T03:02:17.133 に答える