Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 以一种形式混合新的和现有的孩子_Ruby On Rails_Forms_Scope - Fatal编程技术网

Ruby on rails 以一种形式混合新的和现有的孩子

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} 这提供了所有现有的活动地址,但没有新地址: <%=

我正在尝试为我的用户建立一个表单,他们可以为自己输入多达3个地址。创建地址后,可以将其标记为非活动地址,并且不会计入3。我在我的用户模型中使用了
接受\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
关系的默认排序来实现。因此,虽然似乎没有办法明确说明在
字段的参数中使用哪些作用域,但有办法解决这个问题。如果有人能解释如何做到这一点,我会很高兴地指出这个答案是正确的