我正在尝试为我的用户构建一个表单,他们可以为自己输入最多3个地址。创建一个地址后,它可以被标记为非活动状态,并且不会计入3.我在我的用户模型中使用accepts_nested_attributes_for :addresses
并且我在我的表单中尝试过一些东西,但我不能当现有地址作为范围时,获取fields_for
以显示现有地址和新地址。
这些是我尝试过的一些事情:
在控制器中:
(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 %>
有没有办法将这些组合起来获取新的AND范围记录?
答案 0 :(得分:0)
根据我的发现,通过更改传递给fields_for
的参数,无法明确更改范围和显示新记录的字段。
但最终解决我的问题的是,当将符号传递给fields_for
(例如:fields_for :addresses
)时,将使用模型的默认范围。所以我在地址模型上设置了default_scope where(:status => 'active')
,现在fields_for
只会显示活动地址的字段和新地址的字段。
我还需要按照创建日期对这些地址进行排序。通过更改用户模型中has_many :addresses
关系的默认排序,可以实现此目的。因此,虽然似乎没有办法明确说明在fields_for
的参数中使用哪些范围,但有很多方法可以解决它。如果有人能解释如何做到这一点,我很乐意将答案标记为正确。