2015-10-06 67 views
1

我對Ruby on Rails相當陌生,並且正在爲我父親的園林化公司建立一個客戶數據庫,作爲一個寵物項目。我遇到了一些代碼的障礙。Rails:檢查下拉列表中選定的值並與數據庫中的值進行比較

我有三個互相交互的表格:客戶端,發票和服務(嵌套在發票下)。在客戶表中,爲執行的每項服務(例如剪切,灌木,覆蓋物)存儲價格。如果客戶端沒有收到該服務,則該條目爲空。我以這種方式存儲價格,因爲每個客戶都根據其財產的大小向服務收取不同的設定金額。

向發票添加服務時,我想根據客戶表中設置的價格檢查在下拉列表中選擇的服務,如果它爲空(如果客戶沒有收到該服務)。例如,如果選擇了"Cut",我想比較一下(我認爲)@invoice.client.cut

我不完全確定從哪裏開始。當點擊提交按鈕時,你會如何運行這樣的代碼?

在此先感謝您的幫助!

這裏的形式看起來像在當前狀態:

<%= form_for [@invoice, @service] do |f| %> 

    <div class="control-group"> 
    <%= f.label :name %> 
    <div class="controls"> 
     <%= f.select(:name, options_for_select([['Cut', 'Cut'], ["Mulch", "Mulch"],['Bushes', 'Bush'], ['Spring clean-up', 'Spring'], ['Fall clean-up', 'Fall'], ['Snow removal', 'Snow']])) %> 
    </div> 
    </div>  

    <div class="control-group"> 
    <%= f.label :category %><br> 
    <div class="controls"> 
     <%= f.select(:category, options_for_select([["Maintenance", "Maintenance"], ["Seasonal", "Seasonal"]])) %> 
    </div> 
    </div> 

    <div class="field"> 
    <%= f.label :quantity %><br> 
    <%= f.number_field :quantity %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+0

請問'<%@如果invoice.client.cut = =「Cut」%>在這種情況下工作?需要用'<% end %>'結束它,但它的工作原理與if/else條件一樣。請務必在百分比之後不要放入等號。 –

回答

0

而不是在用戶選擇它時檢查所選值的有效性,甚至不顯示下拉列表中的值。用戶體驗與您所描述的不同,但不一定更糟糕。

查詢不同類型服務的客戶端應該由一個額外的模型加以改進,但使用方法的架構你已經有了:

<%= f.select(
    :name, 
    options_for_select(
    [ 
     ['Cut', 'Cut'], 
     ['Mulch', 'Mulch'], 
     ['Bushes', 'Bush'], 
     ['Spring clean-up', 'Spring'], 
     ['Fall clean-up', 'Fall'], 
     ['Snow removal', 'Snow'] 
    ].select do |a| 
     @invoice.client.public_send(a.last.downcase) 
    end 
) 
) %> 
+0

是的,這是完美的。比我想要實現的要好得多。我不知道public_send,這是非常有用的!謝謝! – TheStrabusiness

0

我將在數據屬性的地方在列出的標籤。在下拉客戶的現有服務,可以將視圖添加。然後,您可以使用javascript驗證所選的選項對用戶是否可用,而無需調用數據庫。

<%= f.label :name, 'data-services' => @invoice.client.services %> 
相關問題