私は学習目的で自分で使用する単純なレールアプリを開発しており、2 つのモデルを 1 つの形式で処理しようとしています。Advanced Rails Recipes の第 13 章の例に従い、自分の目的のためにいくつかの簡単な変更を加えて動作させることができました。
私が持っている 2 つのモデルは Invoice と InvoicePhoneNumber です。各 Invoice には、複数の 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 に条件を設定して実行しないようにすることができます。これは私の問題を半分解決し、満足のいくものですが、実際に、たとえば最初の電話番号を削除して 2 番目の電話番号を保持したい場合は、手動でシャッフルする必要があります。
これを行う理想的な方法は、おそらくJavaScriptを使用したブラウザですが、これにアプローチする方法がわかりません。「削除」リンクが 1 つしかない場合は非表示にし、複数ある場合はすべての「削除」リンクを表示する必要があります。「電話番号の追加」リンクで使用されている .insert_html メソッドの機能は、これには適切ではないようです。
私はこれについて段階的なハウツーを求めているわけではありません (実際、入手したくない - これを理解したいのです) が、この問題をどこから始めるべきかについて誰か提案がありますか?