Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么时候应该在Rails应用程序中使用RESTful控制器,什么时候不应该?_Ruby On Rails_Ruby_Rest - Fatal编程技术网

Ruby on rails 什么时候应该在Rails应用程序中使用RESTful控制器,什么时候不应该?

Ruby on rails 什么时候应该在Rails应用程序中使用RESTful控制器,什么时候不应该?,ruby-on-rails,ruby,rest,Ruby On Rails,Ruby,Rest,我正在寻找关于何时知道对模型及其关联的RESTful方法何时合适,何时不合适的指南。也许这是我当前应用程序的本质,但我发现没有关联的简单模型与REST配合得很好,但是具有许多关联的复杂模型似乎确实会使控制器中所需的视图和设置复杂化。打电话的表格开始变得特别复杂 或许这是我的新手理解。我做Rails已经三年多了,但是REST和表单助手一起似乎让我感到困惑。我不知道RoR,所以我将在REST上生成语句 REST和ROI将URL视为一系列名词,并使用HTTP方法(如GET、POST、PUT和DELET

我正在寻找关于何时知道对模型及其关联的RESTful方法何时合适,何时不合适的指南。也许这是我当前应用程序的本质,但我发现没有关联的简单模型与REST配合得很好,但是具有许多关联的复杂模型似乎确实会使控制器中所需的视图和设置复杂化。打电话的表格开始变得特别复杂


或许这是我的新手理解。我做Rails已经三年多了,但是REST和表单助手一起似乎让我感到困惑。

我不知道RoR,所以我将在REST上生成语句

REST和ROI将URL视为一系列名词,并使用HTTP方法(如GET、POST、PUT和DELETE)作为动词。此模型适用于CRUD,甚至适用于具有多个关联的模型。因为URL代表资源,所以关联对象可以表示为URL列表


但是,如果您的系统需要更多的细粒度动词,如validate、move、copy、honk、read、write等,则可能不适合REST。

免责声明:我了解rails,但我仍然是一个新手。 简短回答:休息和表单助手是完全不同的领域

长答覆: 据我所知,具象状态转移只是与表单和视图的实际呈现松散相关

REST实际上与控制器有关,并且在一定程度上与模型有关。这个想法是,你不用考虑与客户的整个对话,而是编写一个webapp,以特定的、可预测的方式响应单个客户的消息

i、 例如,如果客户机得到一个模型,您只需检索它,为他们格式化它,发送给他们,然后忘记它。 如果客户端发布某种更新,您可以更改webapps状态以反映这一点,然后发回任何响应,然后将其忘掉。任何未来的GET或POST都将查看新状态,但不会查看创建它的消息

因此,实际上,应用程序是否是RESTful并不取决于模型有多复杂,而是取决于用户如何与模型交互。以数据为中心的应用程序至少在某种程度上与客户端无关,是REST的一个很好的候选者。严重依赖会话、与特定用户交互、以流程为中心的东西可能不是一个好的选择

另一方面,您有Rails表单助手。这些工具非常适合搭建脚手架,但当您试图以更复杂的方式使用它们时,有时可能会令人沮丧


那么,你的主要问题是什么?关于rails表单助手,您有什么特别的问题吗?关于rails控制器?或者特定于REST的东西?

为系统中的每个顶级模型创建一个资源。所谓顶层,我指的是独立的模型,其意义超出了相关模型。一般来说,大多数型号都是这样。在下面的示例中,职位和候选人是顶级的。你可以考虑候选人是由她所申请的职位和职位组成的。职位申请和以前的工作经历可以通过候选资源访问,因为它们本身并不存在

型号

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
路线

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
,显示可用的职位以及最近的候选人,那么这将是一个新的普通控制器。如果你想编辑这个控制器上的任何信息,酷!您已经有了可用于处理表单投递的控制器,这些控制器将自动连接到
。您可以使用
呈现位置集合,因为您已经将它们作为一种资源,Rails将知道如何在
视图/positions/\u position.html.erb
中查找适当的部分位置


最终的结果应该是,您永远不会编写逻辑来处理对象在多个位置的持久性。这就是控制器变得复杂,表单失控的时候。这也意味着Rails和外部系统知道在哪里检索和存储对象。相同的URL,相同的控制器,只是不同的格式

您可以查看这一系列Railscasts,其中讨论了REST环境中的许多关系和形式: