Вот что вы хотите:
- f.fields_for :referrals, @organization.referrals.select{|ref|ref.new_record?} do |qf|
= render :partial => 'referral_fields', :locals => {:qf => qf}
Первый параметр - это имя ассоциации, которое необходимо rails, чтобы знать, как структурировать параметры. Если вашим первым параметром является коллекция, rails обычно может вывести имя ассоциации из этой коллекции.
Однако ваша коллекция была отфильтрована в обычный массив, в котором связь не так легко вывести. Таким образом, вы передаете конкретную коллекцию в качестве второго параметра.
Удачи!
UPDATE
Я создал небольшое приложение для анализа проблемы, и приведенное выше решение прекрасно работает для меня - форма редактирования не отображает существующие рефералы, только новые. Я выложу соответствующий код, чтобы мы могли видеть, где мы с вами можем отличаться. Одно предостережение, это все в erb, так как я редко работаю с haml и не хочу, чтобы опечатка испортила решение :))
Мои модели:
# app/models/organization.rb
class Organization < ActiveRecord::Base
has_many :referrals
accepts_nested_attributes_for :referrals
end
# app/models/referral.rb
class Referral < ActiveRecord::Base
belongs_to :organization
end
Действие редактирования моего контроллера:
# app/controllers/organizations_controller.rb
class OrganizationsController < ApplicationController
def edit
@organization = Organization.find(params[:id])
2.times { @organization.referrals.build }
end
end
Мои взгляды:
# app/views/organizations/edit.html.erb
<h1>Editing <%= @organization.name %></h1>
<% form_for(@organization) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<% f.fields_for :referrals, @organization.referrals.select{|ref| ref.new_record?} do |referral_fields| %>
<%= render :partial => 'referral', :locals => {:f => referral_fields} %>
<% end %>
<p>
<%= f.submit %>
</p>
<% end %>
# app/views/organizations/_referral.html.erb
<p>
<%= f.label :name, 'Referral Name' %><br />
<%= f.text_field :name %>
</p>
Конечно, я только что прочитал ваши новые комментарии, и, возможно, вам это больше не нужно. Ну что ж, больше документации для потомков:)