控制器操作如何知道要执行哪个REST操作?

时间:2010-07-14 20:41:46

标签: ruby-on-rails

例如,当我在/ profile / new时,我提交表单来创建配置文件时,Rails知道要执行POST操作;当我从/ profile / edit / 1更新该配置文件时,Rails知道要执行PUT操作......我的问题是,它如何知道这样做?

我无法理解这是如何通过控制器的。到底是怎么回事?我挖了一点,我知道ActiveRecord和ActiveResource?参与,但我想知道细节。自从Rails 2.2以来我就一直存在,我找到的每一个资源似乎都是以示例的方式教授的。我有兴趣了解事情如何在较低的层面上发挥作用,但是没有什么可以指导我通过阅读apis&源代码。

2 个答案:

答案 0 :(得分:2)

您知道用户脚手架中新页面或编辑页面的视图页面看起来如何吗?

form_for(@user) # something like that

所以这是一个帮助方法,您可以在action_view / helper .. file

中找到它

基本上,new和edit的表单呈现将由这个form_for方法决定,这个form_for方法将做的是(我只是做了一些要点)

1)它将检查您在form_for中提供的输入类型 (检查api有关使用form_for帮助程序的不同方法) 2)它将根据以下代码决定html选项

if object.respond_to?(:new_record?) && object.new_record? 
  { :class  => dom_class(object, :new),  :id => dom_id(object), :method => :post } # for new 
else
  { :class  => dom_class(object, :edit), :id => dom_id(object, :edit), :method => :put } # for edit
end

3)它会为编辑页面再做一件事,它会添加一个隐藏字段,其中包含用户的id值。

如果您需要更多详细信息,请与我们联系。我会相应地更新我的答案。

答案 1 :(得分:1)

我能说的最好,它完全依赖于你在控制器中执行的操作。例如,@object.new将是一个POST操作,其中-@object.find([:params])将是基于RESTful练习的GET操作。

我可能会离开基地,因为我和你在同一条船上,但这是我对它的解释。