0

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

在 MVC.net 中,这很容易,因为您通常指定 :controller 和 :action。

然而在 Rails 中只有一个“ simple_form_for(@my_model) ”方法。

如果我浏览到/my_models/new操作属性是:

action = "/my_models"

但是如果我去/my_models/1/edit动作属性是:

action = "my_models/1"

如果我想创建一个新的操作来处理 my_model 的 POST 并且仍然重用相同的 _form.html.erb 怎么办……这是如何工作的?

4

1 回答 1

2

我认为它实际上是在做这个 https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/form_helper.rb#L230

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

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

您可以查看该代码https://github.com/plataformatec/simple_form/blob/master/lib/simple_form/form_builder.rb

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

所以 _form.html.erb

<%= simple_form_for @my_object do |f| %>
  <%= render 'form_elements' %>
<% end %>

_custom_form.html.erb

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

_form_elements.html.erb

form elements as usual
于 2013-03-22T20:09:52.407 回答