如何重构具有相同字段的两个表单?

时间:2016-09-22 18:41:26

标签: ruby-on-rails ruby ruby-on-rails-4

我有两种形式 - 一种使用form_for,就像这样:

<% form_for @user do |f| %>
  <%= f.text_field :name %>
  <%= f.email_field :email %>
  ...
  ...

除了使用form_tag

之外,还有另一种形式看起来相似
 <% form_tag send_request_path do |f| %>
  <%= text_field_tag :name, '' %>
  <%= email_field_tag :email, '' %>
  ...
  ...

由于所有字段都是相同的,我想将它们抽象为部分字段,但不能因为一个字段绑定到一个对象而另一个字段不绑定。最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

  

send_request_path发送电子邮件请求。它与用户没有直接关系。

在这种情况下,不应该干掉这两种形式。这就是所谓的“意外重复”。两个表格结果具有相同的结构偶然

由于这两件事情没有关联,因此随着时间的推移,实施将会出现分歧的可能性很大。那你打算做什么?在共享部分中插入PropertiesService.getUserProperties()条件?

答案 1 :(得分:0)

您可以在Partial中使用FORM代码字段。例如

您可以在一个文件中编写FORM对象,如:

<强> first_form.html.erb

<%= form_for @users, url: { send_request_path } do |f| %>
  <%= render partial: 'form', locals: {f: f} %>
<%end%>

<强> second_form.html.erb

<%= form_for @posts, url: { send_request_path } do |f| %>
  <%= render partial: 'form', locals: {f: f} %>
<%end%>

和偏见。

<强> _form.html.erb (PARTIAL)

<%= f.text_field :name %>
<%= f.email_field :email %>

正如您所看到的,我使用 locals 将表单对象传递给Partial。通过这种方式,您可以为两个表单使用相同的表单字段文件。(您也可以在两个文件中使用form_tag而不是form_form。)