0

我希望我的应用程序让用户在几个地址之间进行选择或创建一个。地址将存储在合约对象(Contract.adresse_id)中。

生成显示表单的页面的控制器会生成一个@user 变量。目标是将现有地址的 id 传递给下一个控制器,或者传递新地址的参数(经典嵌套)。这个页面的唯一目的是设置地址,不能修改Contract的其他字段。

模型合约有一个 address_id 字段。我想要一个允许选择的单选按钮:

  • @user.address # it is an address id
  • @user.secondary_adress # address id too
  • 和一个允许创建自己的地址的空表单。(经典嵌套)

我想它应该看起来像:

<%= form_for contract do |f|%>        
<% f.label :address%>   
<% end%>

但后来我不知道该怎么办。我该如何做一个表格,允许在 3 个地址之间进行选择,其中 2 个地址已经存在,而第三个地址将被创建?

4

2 回答 2

0

您可以将第三个单选选项设置为 0 或 -1 的“id”。然后在下一个控制器中查找地址时,如果 id 是您的假非 id,则改为创建一个新地址。通过根据地址是否为新设置该表单的 url,您可能在下一个控制器上使用相同的视图。例如:

- if @address.new_record?
  - form_url = [create path]
- else
  - form_url = [update path]
...
 = form_for(@address, :url => form_url) do |f|

(显然,这是在haml而不是erb中。我强烈建议进行切换)

于 2012-11-15T19:21:58.483 回答
0

我的问题分为两部分:

1) 选择一个现有地址将其放在对比中 2) 添加在同一页面中创建新地址而不是现有地址的可能性

对于 1) 我这样做了:

<%= form_for @contract ,:action => "confirm" do |f| %>
  <div><%= f.radio_button 'address',@user.address.id, :checked => true %>
  <%= render @user.address %>
  </div>

  <div><%= f.radio_button 'address',@user.address_secondary.id, :checked => true %>
  <%= render @user.address %>
  </div>
  <%= f.

  <%= f.submit %>
<% end %>

它只需提交所选现有地址的 id

2)我没有制作一个复杂的单一表格,允许在两者之间进行选择,而是使用嵌套的新地址制作了第二个表格。这意味着我在前一个控制器中创建了一个新地址,但如果我不使用它,这不是问题。

最后,我的页面有两种不同的表单提交不同的数据,但这样做更容易。

于 2012-11-16T09:26:56.447 回答