Ruby on rails 以一种形式混合新的和现有的孩子
我正在尝试为我的用户建立一个表单,他们可以为自己输入多达3个地址。创建地址后,可以将其标记为非活动地址,并且不会计入3。我在我的用户模型中使用了Ruby on rails 以一种形式混合新的和现有的孩子,ruby-on-rails,forms,scope,Ruby On Rails,Forms,Scope,我正在尝试为我的用户建立一个表单,他们可以为自己输入多达3个地址。创建地址后,可以将其标记为非活动地址,并且不会计入3。我在我的用户模型中使用了接受\u嵌套的\u属性\u:addresses,我在表单中尝试了一些方法,但我无法获得字段\u来显示现有地址和在现有地址范围内的新地址 以下是我尝试过的几件事: 在控制器中: (3-@user.addresses.active.count).times{@user.addresses.build} 这提供了所有现有的活动地址,但没有新地址: <%=
接受\u嵌套的\u属性\u:addresses
,我在表单中尝试了一些方法,但我无法获得字段\u来显示现有地址和在现有地址范围内的新地址
以下是我尝试过的几件事:
在控制器中:
(3-@user.addresses.active.count).times{@user.addresses.build}
这提供了所有现有的活动地址,但没有新地址:
<%= f.fields_for :addresses, @user.addresses.active do |address| %>
<%= address.text_field :line_1 %>
<% end %>
这为我提供了现有地址和新地址,但包括非活动地址:
<%= f.fields_for :addresses do |address| %>
<%= address.text_field :line_1 %>
<% end %>
有没有一种方法可以将它们结合起来以获得新的记录和范围记录?根据我的发现,不可能通过更改传递给字段的参数来显式更改新记录的范围和显示字段
但最终解决了我的问题的是,当将符号传递给字段(例如:字段(地址)
)时,将使用模型的默认范围。因此,我在我的地址模型上设置了default\u范围,其中(:status=>“active”)
,现在fields\u将只显示活动地址的字段和新地址的字段
我还需要按创建日期对这些地址进行排序。这可以通过更改用户模型中has_many:addresses
关系的默认排序来实现。因此,虽然似乎没有办法明确说明在
的
字段的参数中使用哪些作用域,但有办法解决这个问题。如果有人能解释如何做到这一点,我会很高兴地指出这个答案是正确的