如何决定使用哪个动作

时间:2012-01-15 00:02:54

标签: ruby-on-rails ruby-on-rails-3 routes action

我对网络开发非常陌生(我觉得我最近的所有帖子都是以这种方式开始的)并且随着时间的推移变得不那么新了。我正处于可以完成工作所需的大量工作的地步,但我遇到了一个棘手的问题:

如何判断我应该对给定任务使用哪种操作? indexshowneweditcreateupdatedestroy

destroy是非常明显的,我可以将其余部分松散地分成两个桶,其中index / show在一个中,new / edit / create在另一个中。但是我如何决定使用哪一个或者我应该自己构建一个?

一些通用指南或进一步阅读的链接对我非常有益。

2 个答案:

答案 0 :(得分:7)

以下是我对这7个RESTful Controller操作的看法。以人员资源为例。相应的PeopleController将包含以下操作:

索引:列出一组人(可能有一些可选条件)。

显示:加载一个先前创建的人,目的是查看。相应的视图通常是“只读”。

new :设置或构建Person的新实例。它还没有保存,只是设置。相应的View通常是某种类型的表单,用户可以在其中输入此新Person的属性值。提交此表单后,Rails会将其发送到“创建”操作。

创建:保存使用“新”操作设置的人员。

编辑:检索以前创建的人员,目的是更改其属性。尚未进行或提交更改。相应的View通常是Rails将提交给“更新”操作的表单。

更新:保存编辑以前创建的人员时所做的更改。

销毁:嗯,正如您猜测的那样,销毁或删除以前创建的人员。

当然,对于这7个动作是否足以支持所有控制器存在一些争论,但根据我的经验,他们倾向于完成这项工作,只有少数例外。添加其他操作通常是需要其他类型资源的标志。

例如,假设您有一个人力资源应用程序,其中包含您刚要雇用的人力资源。为了实现这一目标,您可能会想要创建一个“雇佣”行动(即/ people / 456 / hire)。但是,更加RESTful的方法会将此视为就业资源的“创造”。如下所示:

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个Controller操作)。从长远来看,它会得到回报,并帮助您坚持这7个基本的REST动作。

答案 1 :(得分:1)

您可以根据需要为自己的行为命名。通常,按照Rails惯例,index是默认值,show显示一个项目,list显示多个,newedit开始编辑新旧项目,createupdate将分别保存它们。正如您猜测的那样,destroy会杀死一个项目。但所有这些只是惯例:如果你想做的话,你可以命名你的行动yellowtail