Railsを初めて使用するため、RailsでRubyの概要を示すWebサイトやリファレンスを見つけるのに苦労しています。MVC、ActiveRecord、およびそのようなものを基本的に理解していますレベルですが、いくつかの関係と基本を理解するのに苦労しています。例:
:content_for
またはrender
を部分的に)、使用してはいけない方法は何ですか?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.
1。知っておく必要のあるすべての命名規則は何ですか?
dbテーブルは複数形、モデルは単数形、コントローラーは複数形です。つまり、User
テーブルに裏打ちされたusers
モデルがあり、UsersController
を通して見ることができます。
ファイルには、クラス名のワイドケースバージョンとして名前を付ける必要があります。したがって、FooBar
クラスはfoo_bar.rb
というファイルにある必要があります。モジュールと名前空間を作成する場合、名前空間はフォルダーで表す必要があります。したがって、Foo::Bar
クラスについて話している場合、それはfoo/bar.rb
にあるはずです。
2。コントローラーアクションはどのように構成され、名前が付けられるべきですか?
コントローラのアクションはRESTfulである必要があります。つまり、コントローラーは、RPCを有効にするだけでなく、リソースを公開するものと考える必要があります。 Railsには、リソースのメンバーアクションとコレクションアクションの概念があります。メンバーアクションは、特定のインスタンスで動作するものです。たとえば、/users/1/edit
はユーザーのメンバー編集アクションになります。収集アクションは、すべてのリソースを操作するものです。したがって、/users/search?name=foo
は収集アクションになります。
上記のチュートリアルでは、これらのアイデアをルートファイルに実際に実装する方法について説明しています。
。ビューに情報をレンダリングする(: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。ヘルパーに何を入れ、何を入れないか?
テンプレートには、basic分岐ロジックのみが含まれている必要があります。もっと激しいことをする必要があるなら、それはヘルパーにあるべきです。ビュー内のローカル変数は、世界で善良で正しいものすべてに対する忌まわしきものであるため、それはあなたがヘルパーを作るべきであるという素晴らしい兆候です。
もう1つの理由は、純粋なコードの再利用です。わずかな変化だけで同じことを何度も繰り返している場合は、それをヘルパーに引き込みます(まったく同じことである場合は、部分的に行う必要があります)。
5。よくある落とし穴や、最初から正しく行う必要があることは何ですか?
パーシャルは決してインスタンス(@)変数を直接参照しないでください。これにより、将来の再利用が妨げられます。常に:locals => { :var_name => value }
パラメータを介してレンダリング関数にデータを渡します。
ビューのレンダリングに直接関係しないロジックをビューに含めないでください。ビューで何かを実行するオプションがあり、それを別の場所で実行する場合は、10回のうち9回、他の場所で実行する方が適切です。
Railsは、「ファットモデル、スキニーコントローラー」というマントラがあります。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
私は少し前にいくつかの命名規則を書きました:
すべてのファイル名は同じ規則に従ってsnake_caseにあります-モデル:単数形(例:Restaurant
)-コントローラー:複数形(例:RestaurantsController
)-DB内のテーブル:plural(eg restaurants
)-URL:all in plural(eg _/restaurants
_、_/restaurants/:id
_、_/restaurants/new
_)
Rails generate
_コマンドRails g model
_ Restaurant
_name:string rating:integer
_Rails g migration AddDescriptionTo
_Restaurants
_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
_内。 one要素に属しているため。has_many
_内。 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
_