0

私は学習目的で自分で使用する単純なレールアプリを開発しており、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 メソッドの機能は、これには適切ではないようです。

私はこれについて段階的なハウツーを求めているわけではありません (実際、入手したくない - これを理解したいのです) が、この問題をどこから始めるべきかについて誰か提案がありますか?

4

2 に答える 2

2

部分コレクション用のカウンターがあります。

<%= render :partial => "ad", :collection => @advertisements %>  

これにより、「advertiser/_ad.erb」がレンダリングされ、ローカル変数 ad が表示用のテンプレートに渡されます。反復カウンターは、partial_name_counter という形式の名前を持つテンプレートで自動的に使用可能になります。上記の例の場合、テンプレートは feed になりますad_counter

于 2010-01-25T13:37:51.310 に答える
1

行が最初の行であるかどうかを検出する問題については、パーシャルを呼び出すときにローカル変数を追加できます。

<%= render :partial => 'mypartial', :locals => {:first => true}  %>

行が最初かどうかに関係なく、メインファイルで検出する方がはるかに簡単だと思います。

電話番号が最初かどうかを検出する代わりに、電話番号が唯一のものかどうかを検出することもできます。そうでない場合は、すべての番号の横に削除リンクを追加します。それ以外の場合は、削除リンクを表示しません。リンクを表示/非表示にするだけでなく、コードを追加して、フォームを使用する代わりに URL を (誤って) 使用して番号を直接削除して最後の番号を削除しないようにする必要があることに注意してください。

于 2010-01-25T10:28:47.950 に答える