2012-01-15 7 views
0

私は最近、ウェブ開発を始めたばかりです(私の記事はすべてこのように始まったような気がします)。私は自分の仕事に必要なもののかなりの量を行うことができるところにいるが、私が実行し続ける1つのかわいそうな問題がある:どのアクションを使用するかを決める方法

与えられたタスクにどのようなアクションを使うべきかどうすればよいのだろうか? index,show,new,edit,create,updateまたはdestroy

破壊はかなり明白です。残りの部分は、インデックス/ショーを1つに、新しい/編集/作成をもう一方の2つのバケットに大雑把に分けています。しかし、どのようなものを使うのか、自分のものを作るのかはどうすれば決めることができますか?

一般的なガイドラインや追加の読者へのリンクは、私にとって非常に有益です。

答えて

6

ここでは、これらの7つのRESTful Controllerアクションについて考えています。たとえば、Personリソースを取ります。対応するPeopleControllerには、次のアクションが含まれます。

インデックス:多分、いくつかのオプション条件付きの人のセットをリストします。

show:を表示するために、先に作成した単一の人物をロードします。対応するビューは通常「読み取り専用」です。

新しい:Personの新しいインスタンスをセットアップまたは構築します。まだ保存されておらず、セットアップだけです。対応するViewは、通常、ユーザーがこの新しいPersonの属性値を入力できる形式のフォームです。このフォームが送信されると、Railsはそれを「作成」アクションに送信します。

:「新しい」アクションを使用して設定した人を保存します。

編集:その属性を変更することを意図して、以前に作成した人を取得します。変更はまだ行われていないか、または提出されていません。対応するViewは通常、Railsが "update"アクションに提出するフォームです。

更新:以前作成した人物を編集するときの変更を保存します。

破棄:あなたが推測したように、以前に作成されたPersonを破棄または削除します。

もちろん、これらの7つのアクションがすべてのコントローラに十分であるかどうかに関していくつかの議論がありますが、私の経験ではほとんど例外なく仕事をする傾向があります。他のアクションを追加することは、通常、追加のタイプのリソースを必要とする兆候です。

たとえば、採用したい人材がたくさんある人事アプリケーションがあるとします。これを達成するには、「雇用」アクション(つまり、/ people/456 /雇用)を作成するように誘惑されるかもしれません。しかし、よりRESTfulなアプローチは、これをEmploymentリソースの「創造」と考えています。次のようなものがあります。

class Person < ActiveRecord::Base 
    has_many :employments 
    has_many :employers, :class_name => 'Company', :through => :employments, :source => :company 
end 

class Employement < ActiveRecord::Base 
    belongs_to :person 
    belongs_to :company 
end 

class Company < ActiveRecord::Base 
    has_many :employments 
    has_many :employees, :class_name => 'Person', :through => :employments, :source => :person 
end 

EmploymentsControllerの作成アクションが使用されます。

これは長くなっています。異なるリソースをたくさんセットアップすることを恐れないでください(おそらく、これらのそれぞれに対して7つのコントローラアクションをすべて使用することはありません)。長期的には報酬を得て、7つの基本的なRESTfulな行動に固執するのに役立ちます。

1

任意のアクションに名前を付けることができます。一般に、Rails規約では、indexがデフォルトであり、が多く表示され、とeditが新規または古いアイテムの編集を開始し、createupdateがそれぞれ保存されます。あなたが推測したとおり、destroyはアイテムを殺すでしょう。しかし、これらはすべて慣例に過ぎません。あなたがしたいことがあれば、あなたの行動はyellowtailと名付けることができます。

関連する問題