Я пытаюсь запустить это..
- f.fields_for :referrals do |qf|
Но я хотел бы пройти и это, @organization.referrals.select{|ref|ref.new_record?}
. Это делается для того, чтобы передаваемые формы были исключительно новыми объектами, а не более старыми.
Я пытался это сделать..
- f.fields_for :referrals do |qf|
- if qf.object.new_record?
= render :partial => 'referral_fields', :locals => {:qf => qf}
Это позволяет правильно отображать его в представлении, но параметры по-прежнему заполняются каждым ранее созданным вложенным объектом.
Это наводит меня на мысль, что мне нужно передать эту опцию в самой инструкции fields_for.
Я также пробовал это:
- f.fields_for @organization.referrals.select{|ref|ref.new_record?} do |qf|
= render :partial => 'referral_fields', :locals => {:qf => qf}
А также это :
- f.fields_for :referrals, @organization.referrals.select{|ref|ref.new_record?} do |qf|
= render :partial => 'referral_fields', :locals => {:qf => qf}
Первый пример покажет и позволит передать только один объект. Где моя форма должна разрешить динамическое количество повторяющихся вложенных форм.
Второй будет отображать и передавать все вложенные объекты
Информация о приложении
#organization.rb
has_many :referrals
accepts_nested_attributes_for :referrals, :reject_if => proc { |attributes| attributes.all? { |k, v| v.blank? } }, :allow_destroy => true
#referral.rb
belongs_to :organization
#referrals_controller.rb
def new
2.times { @organization.referrals.build }
....
def create
@referral = Referral.new(params[:referral])
if @referral.valid? && @organization.referrals << @referral
flash[:notice] = "Referrals saved."
redirect_to new_organization_referrals_path(@organization)
else
render :action => :new, :layout => 'manage'
end
end