Ruby on rails 3 在Rails 3中,simple_form_for方法如何知道是否在action属性中包含参数[:id]?

Ruby on rails 3 在Rails 3中,simple_form_for方法如何知道是否在action属性中包含参数[:id]?,ruby-on-rails-3,forms,dry,Ruby On Rails 3,Forms,Dry,我是rails新手,我正试图弄清楚如何使表单上的[action]属性成为动态的,以便可以重用表单标记 在MVC.net中,这很容易,因为您通常指定:控制器和:操作 然而,在rails中(@my\u model)只有一个“简单的表单”方法 如果我浏览到/my_models/new,则操作属性为: action = "/my_models" action = "my_models/1" 但是如果我转到/my_models/1/编辑,动作属性是: action = "/my_models" ac

我是rails新手,我正试图弄清楚如何使表单上的[action]属性成为动态的,以便可以重用表单标记

在MVC.net中,这很容易,因为您通常指定:控制器和:操作

然而,在rails中(@my\u model)只有一个“简单的表单”方法

如果我浏览到/my_models/new,则操作属性为:

action = "/my_models"
action = "my_models/1"
但是如果我转到/my_models/1/编辑,动作属性是:

action = "/my_models"
action = "my_models/1"

如果我想创建一个新的操作来处理我的模型的帖子,并且仍然重用相同的_form.html.erb。。。这是怎么工作的?

我想实际上是rails在做这件事

简而言之,它只是根据资源推断url,以及它是新的还是现有的

SimpleForm的FormBuilder继承自ActionView::Helpers::FormBuilder

您可以查看该代码

我想我不明白最后一部分。假设您想使用自定义操作而不是推断操作,您可以只对表单元素进行一部分,并对所有表单使用该部分

so_form.html.erb

<%= simple_form_for @my_object do |f| %>
  <%= render 'form_elements' %>
<% end %>
<%= simple_form_for @my_object, :url => custom_url do |f| %>
  <%= render 'form_elements' %>
<% end %>