Я разрабатываю простое приложение rails для собственного использования в учебных целях и пытаюсь работать с 2 моделями в 1 форме. Я следовал примеру в главе 13 «Расширенных рецептов Rails» и заставил его работать с несколькими простыми модификациями для моих собственных целей.
У меня есть две модели: Invoice и InvoicePhoneNumber. Каждый Счет может иметь несколько номеров InvoicePhoneNumbers. Что я хочу сделать, это убедиться, что с каждым счетом связан как минимум 1 номер телефона. Пример в книге помещает ссылку «удалить» рядом с каждым номером телефона (задачи в книге). Я хочу убедиться, что у самого верхнего номера телефона нет ссылки для удаления, но я не могу понять, как это сделать. Частичный шаблон, который производит каждую строку списка телефонных номеров в счете-фактуре, выглядит следующим образом:
<div class="invoice_phone_number">
<% new_or_existing = invoice_phone_number.new_record? ? 'new' : 'existing' %>
<% prefix = "invoice[#{new_or_existing}_invoice_phone_number_attributes][]" %>
<% fields_for prefix, invoice_phone_number do |invoice_form| -%>
<%= invoice_form.select :phone_type, %w{ home work mobile fax } %>
<%= invoice_form.text_field :phone_number %>
<%= link_to_function "remove", "$(this).up('.invoice_phone_number').remove()" %>
<% end -%>
</div>
Теперь, если бы я мог определить, когда генерируется первый номер телефона, я мог бы поместить условие в функцию link_to_function, чтобы оно не выполнялось. Это наполовину решило бы мою проблему и было бы удовлетворительным, хотя это означало бы, что если бы я действительно хотел, скажем, удалить первый номер телефона и оставить второй, мне пришлось бы сделать некоторые ручные тасования.
Идеальный способ сделать это, предположительно, в браузере с javascript, но я не знаю, как к этому подойти. Мне нужно было бы скрыть ссылку «удалить», когда была только одна, и показать все ссылки «удалить», когда их больше одной. Функциональность в методе .insert_html, который используется в ссылке «добавить номер телефона», кажется недостаточной для этого.
Я не прошу пошаговые инструкции для этого (на самом деле я бы предпочел не получать - я хочу это понять), но есть ли у кого-нибудь предложения о том, с чего начать это проблема?
Спасибо.