form_for中url路径的含义是什么?

时间:2014-06-23 22:15:20

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

我们的rails 3.2 app中定义了copy操作和copy.html.erb。此复制操作是从当前记录复制,允许用户稍微修改并提交创建,就像new一样。以下是copy.html.erb的标题:

<%= form_for @engine_config, :as => :engine_config, :url => engine_configs_path do |f| %>

点击save后,它会点击控制器中的create,这就是我们想要的。

我们的问题是engine_configs_path代表什么?通常engine_configs_path用于索引。这里的表单用于创建而不是索引。创建表单上的索引路径的原因是什么?

3 个答案:

答案 0 :(得分:5)

当你bundle exec rake routes时,你会看到类似的内容;

engine_configs GET        /engine_configs(.:format)                               engine_configs#index
               POST       /engine_configs(.:format)                               engine_configs#create

这意味着engine_configs_path适用于GET控制器操作的indexPOST控制器操作的create

因此engine_configs_path指的是表单在控制器中发布的网址。

答案 1 :(得分:1)

engine_configs_path的行为取决于HTTP动词。也就是说,到engine_configs_path的HTTP GET将显示索引;到engine_configs_path的HTTP POST将创建一个新的。 form_for可以通过@engine_config检查数据库中是否存在@engine_config.new_record?,因此它知道执行POST而不是PUT。

答案 2 :(得分:1)

<强>表格

您通常不需要在url - Rails&#39;中定义form参数。 form_for帮助器获取一个初始化的类对象&amp;自动提取所需的数据:

来自docs

  

通常,用于创建或更新资源的表单反映了   资源的身份有几种方式:

     
      
  • (i)表格的网址   发送到(表单元素的action属性)应该导致a   请求被路由到适当的控制器操作(使用   适当:在现有资源的情况下为id参数)

  •   
  • (ⅱ)   输入字段应以控制器中的方式命名   它们的值出现在params散列中的适当位置,

  •   
  • (iii)对于现有记录,最初是表格   显示,输入与资源属性对应的字段   应该显示这些属性的当前值。

  •   
     

在Rails中,通常通过使用form_for创建表单来实现   以及一些相关的辅助方法。 form_for生成一个   适当的表单标记,并生成一个知道的表单生成器对象   模型的形式是关于。输入字段是通过调用方法创建的   在表单构建器上定义,这意味着他们能够生成   适当的名称和与模型对应的默认值   属性,以及方便的ID等。中的约定   生成的字段名称允许控制器很好地接收表单数据   在没有任何努力的情况下以params结构。

-

<强>路线

您的具体问题与route form_for方法将使用

有关

根据w3c standards,HTML表单默认为POST个数据。这意味着无论何时在Rails中使用form_for助手,它都会自动使用路由的POST变体

正如Acacia所述,如果您使用resourceful路线,您将获得以下一系列路线:

enter image description here

这意味着您可以使用engine_configs_path的HTTP动词调用相同的路线(POST)发送给特定的controller#action,这就是您正在发生的事情< / p>