システム内の各トップレベルモデルのリソースを作成します。トップレベルでは、私は独立しており、関連するモデルの外で意味を持つモデルを意味します。一般的に、それはほとんどのモデルです。次の例では、位置と候補は最上位です。あなたは、候補者が過去の雇用と彼女が適用したポジションで構成されると考えることができます。求職者への応募書類や過去の履歴書は、候補者のリソースを通じてアクセスすることができます。候補者自身は存在しないためです。
モデル
class Position
has_many :candidate_positions
has_many :candidates, :through => :candidate_positions
end
class Candidate
has_many :candidate_positions
has_many :positions, :through => :candidate_positions
has_many :past_employments
accepts_nested_attributes_for :past_employments
accepts_nested_attributes_for :candidate_positions
end
class PastEmployment
belongs_to :candidate
end
class CandidatePosition
belongs_to :candidate
belongs_to :position
end
ルート
map.resources :positions
map.resources :candidates
モデルにまたがるユーザとの相互作用のための非機知コントローラを使用。たとえば、利用可能なポジションと最近の候補を表示するHomeController
を作成する場合は、これは新しい単純なコントローラーになります。このコントローラーの情報を編集したい場合は、クール!フォームの投稿を処理するためのコントローラが既に用意されています。これは自動的に<% form_for @candidate %>
と配線されます。 <%= render @positions %>
であなたの位置のコレクションをレンダリングすることができます。そして、それらをリソースにしたので、Railsはviews/positions/_position.html.erb
に適切な部分を探します。
最終的には、複数の場所でオブジェクトの永続性を処理するロジックを書くことはないはずです。コントローラーが複雑になり、フォームが手に入らなくなります。また、Railsと外部システムは、オブジェクトの検索と格納の場所を知っています。同じURL、同じコントローラ、ちょうど異なるフォーマット。