2010-01-25 36 views
0

我正在開發一個簡單的導軌應用程序,供我自己用於學習目的,我試圖處理1個窗體中的2個模型。我已經按照Advanced Rails Recipes第13章中的例子進行了操作,並且爲了我自己的目的使用了一些簡單的修改。需要幫助修改多個模型的示例來自高級導軌食譜書

我有2個模型是發票和發票的PhoneNumber。每個發票可以有幾個發票電話號碼。我想要做的是確保每張發票至少有一個與其關聯的電話號碼。本書中的示例在每個電話號碼旁邊放置了一個「刪除」鏈接(本書中的任務)。我想確保最頂級的電話號碼旁邊沒有刪除鏈接,但我無法弄清楚如何做到這一點。產生髮票中電話號碼列表的每一行的部分模板如下:

<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方法中的功能似乎不適合此。

我並不是一直要求一步一步的做法(實際上我不想得到一個 - 我想明白這一點),但是沒有人會對從何處着手提出一些建議有這個問題?

謝謝。

回答

1

爲了您的檢測行是否是第一個與否的問題,稱部分時,你可以添加一個局部變量:

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

,因爲它會更容易在主文件來檢測,不管我猜的是否是第一排。

不是檢測電話號碼是否是第一個,也可以檢測電話號碼是否是唯一的。如果不是,請在所有數字旁邊添加刪除鏈接,否則不要顯示刪除鏈接。請注意,除了顯示/隱藏鏈接之外,您還需要添加代碼,以防止通過(錯誤)使用URL刪除最後一個數字,直接刪除數字而不是使用表單。

2

There is a counter for partial-collections:

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

這 將呈現 「廣告/ _ad.erb」 和 通過局部變量廣告的 模板顯示。迭代 計數器將自動生成 ,模板的名稱爲 ,其形式爲partial_name_counter。 在 上例的情況下, 模板將被送入ad_counter

+0

噢不錯,不知道! – Veger 2010-01-25 17:02:26

+0

謝謝,有一點擺弄我工作。看起來像一個非常有用的技術,我可以在其他地方使用。這對我的問題來說是一個很好的臨時解決方案,但並沒有解決讓第一個電話號碼不能刪除的問題(這讓我覺得在JavaScript中可以解決問題)。不過謝謝。 – brad 2010-01-26 01:09:24