43

Railsを初めて使用するため、RubyonRailsの概要を説明するWebサイトやリファレンスを見つけるのに苦労しています。私はMVC、ActiveRecord、およびそのようなものを基本的なレベルで理解していますが、いくつかの関係と基本を理解するのに苦労しています。例えば:

  1. 知っておく必要のあるすべての命名規則は何ですか?
  2. コントローラのアクションはどのように構成され、名前が付けられる必要がありますか?
  3. :content_forビューに(または部分的に)情報をレンダリングするための最良の方法は何renderですか?また、使用してはいけない方法は何ですか?
  4. ヘルパーに何を入れ、何を入れてはいけないのですか?
  5. よくある落とし穴や、最初から正しく行う必要があることは何ですか?
  6. コードをモジュール化するにはどうすればよいですか?それがlibフォルダの目的ですか?

私はこの質問に関してStackOverflowで多くの回答を読みましたが、それらはすべて、読む必要のある300ページ以上の本を指しているだけですが、重要なことの簡潔な要約が必要です。

私がすでに知っているいくつかのリソースですが、新しいユーザーのための基本的な概念の簡潔な要約を提供していません。

あなたが提供できるどんな助け、参照、またはガイダンスにも感謝します!

P.S. I would like this wiki to become a living document, so please add to it, edit it, etc. as you feel necessary.

4

2 に答える 2

78

1.知っておく必要のあるすべての命名規則は何ですか?

dbテーブルは複数形、モデルは単数形、コントローラーは複数形です。したがって、テーブルにUser裏打ちされ、。から見​​えるモデルがあります。usersUsersController

ファイルには、クラス名のワイドケースバージョンとして名前を付ける必要があります。したがって、FooBarクラスは。というファイルに含まれている必要がありますfoo_bar.rb。モジュールで名前空間を使用している場合、名前空間はフォルダーで表す必要があります。したがって、クラスについて話している場合はFoo::Bar、にあるはずですfoo/bar.rb

2.コントローラーのアクションはどのように構成され、名前が付けられる必要がありますか?

コントローラのアクションはRESTfulである必要があります。つまり、コントローラーは、RPCを有効にするだけでなく、リソースを公開するものと考える必要があります。Railsには、リソースのメンバーアクションとコレクションアクションの概念があります。メンバーアクションは、特定のインスタンスで動作するものです。たとえば、/users/1/editユーザーのメンバー編集アクションです。収集アクションは、すべてのリソースで機能するものです。したがって/users/search?name=foo、収集アクションになります。

上記のチュートリアルでは、これらのアイデアをルートファイルに実際に実装する方法について説明しています。

3.ビューで情報を(部分的にまたは部分的にレンダリングするために)レンダリングするための最良の方法は何:content_forですか?また、使用してはいけない方法は何ですか?

content_for内側のテンプレートから外側のテンプレートにhtmlを追加できるようにする場合、たとえば、ビューテンプレートからレイアウトテンプレートに何かを追加できるようにする場合に使用する必要があります。良い例は、ページ固有のjavascriptを追加することです。

# app/views/layout/application.rb
<html>
  <head>
    <%= yield :head %>
...

# app/views/foobars/index.html.erb

<% content_for :head do %>
  <script type='text/javascript'>
    alert('zomg content_for!');
  </script>
<% end %>

パーシャルは、大きなファイルを分割するため、または同じビットの情報を複数回レンダリングするためのものです。例えば

<table>
  <%= render :partial => 'foo_row', :collection => @foobars %>
</table>

# _foo_row.html.erb

<tr>
 <td>
  <%= foobar.name %>
 </td>
</tr>

4.ヘルパーに何を入れ、何を入れてはいけないのですか?

テンプレートには、基本的な分岐ロジックのみが含まれている必要があります。もっと激しいことをする必要があるなら、それはヘルパーにあるべきです。ビュー内のローカル変数は、世界で善良で正しいものすべてに対する忌まわしいものであるため、ヘルパーを作成する必要があることを示す大きな兆候です。

もう1つの理由は、純粋なコードの再利用です。わずかな変化だけで同じことを何度も繰り返している場合は、それをヘルパーに引き込みます(まったく同じことである場合は、部分的に行う必要があります)。

5.よくある落とし穴や、最初から正しく行う必要があることは何ですか?

パーシャルは、インスタンス(@)変数を直接参照しないでください。これにより、後で再利用できなくなります。常に:locals => { :var_name => value }paramを介してrender関数にデータを渡します。

ビューのレンダリングに直接関係しないロジックをビューに含めないでください。ビューで何かを実行するオプションがあり、それを別の場所で実行する場合は、10回のうち9回、他の場所で実行する方が適切です。

レールには「ファットモデル、スキニーコントローラー」というマントラがあります。1つの理由は、モデルがオブジェクト指向であり、コントローラーが本質的に手続き型であるということです。もう1つは、モデルはコントローラーをクロスできますが、コントローラーはモデルをクロスできないことです。3つ目は、モデルの妥当性が高いことです。それはちょうど良い考えです。

6.コードをモジュール化するにはどうすればよいですか?それがlibフォルダーの目的ですか?

libフォルダーは、モデルの懸念を超えるコード用です(つまり、モデルではないが、複数のモデルで使用されるもの)。そこに何かを入れる必要があるとき、それを入れるモデルを理解することができないので、あなたは知っているでしょう。それが起こるまで、あなたはただlibを無視することができます。

覚えておくべきことは、rails 3の時点では、libは自動ロードパス上にないということです。つまりrequire、そこに入れる(または追加する)ものは何でも必要です。

libディレクトリ内のすべてのモジュールを自動的に要求する方法:

#config/initializers/requires.rb
Dir[File.join(Rails.root, 'lib', '*.rb')].each do |f|
  require f
end
于 2011-03-05T17:03:19.400 に答える
4

私は少し前にいくつかの命名規則を書きました:

Railsの規則

全般的

すべてのファイル名は、同じ規則に従ってsnake_caseにあります -モデル:単数形(eg Restaurant)-コントローラー:複数形(eg RestaurantsController)-DB内のテーブル:複数形( eg ) -URL restaurants:すべて複数形(eg /restaurants、、/restaurants/:id/restaurants/new

rails generateコマンド

  • モデルの作成:単数(モデルの名前が単数であるため)。例えばrails g model Restaurant name:string rating:integer
  • 移行を作成します:複数形(テーブルの名前を使用するため)。例えばrails g migration AddDescriptionToRestaurants description:text
  • コントローラーの作成:複数形rails g controller Restaurants index show

モデル(単数)

ActiveRecordメソッド

すべてActiveRecordのメソッドがモデルにリンクされているため、すべてが特異です。例 :Restaurant.all ----Restaurant.create(name: "Burger King", rating: 2)Restaurant.find(params[:id])

アソシエーション

  • で特異ですbelongs_toそれは1つの要素に属しているからです。
  • 複数has_many形。それは多くの要素を持っているからです。

例えば

class Restaurant < ActiveRecord::Base
  has_many :reviews
end

class Review < ActiveRecord::Base
  belongs_to :restaurant
end

ルート

資力

リソースのルートを定義するときの複数形:

resources :restaurants

ルートヘルパー

  • index複数形(要素のリストを表示しているため)。例:restaurants_path。にも使用できますcreate
  • show単数(1つの要素のみを表示しています。括弧内の要素が必要です)。例:restaurant_path(@restaurant)update&にも使用できますdelete
  • new単数。例えばnew_restaurant_path
于 2017-11-29T17:41:50.903 に答える