Я отрисовываю партиал, используя ajax со следующим кодом:
В вашем основном файле поместите это:
<div id="phone_numbers">
<%= render @phone_number, :phone_types => PhoneNumbersHelper::phone_types %>
</div>
<%= link_to_function "Add Number", do |page|
partial = escape_javascript( render PhoneNumber.new, :phone_types => PhoneNumbersHelper::phone_types )
page << "$('#phone_numbers').append(\"#{partial}\")"
end %>
Когда вы нажмете «Добавить номер», «_phone_number» будетсгенерированный и загруженный в div с идентификатором "phone_numbers"
У меня в партиале есть:
<div class="phone_number">
<%= fields_for 'location[numbers][]', phone_number do |f| %>
<div class="field">
<%= f.label "Phone Number" %><br/>
+(<%= f.text_field :code, :class => 'phone_code' %>)-
<%= f.text_field :number, :class => 'phone_number' %>
<%= f.select :ptype, phone_types %>
</div>
<% end%>
</div>
Причина, по которой у меня есть 'location [numbers] []', заключается в том, что яиспользование частичного _phone_number в представлении для модели Location.Модель «Мое местоположение» имеет следующее:
attr_accessor :numbers
Это позволяет местоположению [числам] установить средство доступа «номера».Причина, по которой у нас есть [] после местоположения [номера], заключается в том, чтобы разрешить передачу нескольких телефонных номеров в модель.
Кроме того, вам необходимо сохранить номера телефонов перед сохранением в модели местоположения
before_save :save_numbers
def save_numbers
unless numbers.nil?
numbers.each do |n|
unless n[:number].nil? || n[:code].nil? || n[:number].blank? || n[:code].blank?
phone_numbers.build(n)
end
end
end
end
У моей модели также есть has_many: phone_numbers;это объясняет phone_numbers.build
Теперь для контроллера:
def new
1.times { @location.phone_numbers.build }
@phone_numbers = @location.phone_numbers
@phone_number = @phone_numbers[0]
end
Обратите внимание, что в приведенном выше коде я использовал @phone_number, который я передаю частичному рендеру.Rails 3 поддерживает коллекции, что означает, что если вы хотите, чтобы по умолчанию было создано много телефонных номеров, вы можете передать @phone_numbers в метод частичного рендеринга, и rails автоматически сгенерирует несколько телефонных номеров!
Надеюсь, это поможет ... =)