簡體   English   中英

Rails:檢查下拉菜單中選擇的值並與數據庫中的值進行比較

[英]Rails: Checking value selected in a drop-down and comparing to a value in database

我是Ruby on Rails的新手,我正在為我父親的園林公司(作為一個寵物項目)建立客戶數據庫。 我遇到了一些代碼障礙。

在這里,我有三個相互交互的表:“客戶”,“發票”和“服務”(位於“發票”下)。 在客戶表中,存儲了執行的每種服務的價格(例如,割草,灌木,覆蓋)。 如果客戶端沒有收到該服務,則該條目為空。 我之所以這樣存儲價格,是因為每個客戶根據其財產的大小向服務收取不同的固定金額。

將服務添加到發票時,我想對照客戶表中設置的價格檢查下拉菜單中選擇的服務,如果該服務為null(如果客戶未收到該服務),則給出一個錯誤。 例如,如果選擇"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 %>

我會在列出客戶當前服務的視圖的某處添加數據屬性,可能在該下拉菜單的標簽上。 然后,您可以使用javascript來驗證所選選項對用戶可用,而無需調用數據庫。

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

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

應該通過一個額外的模型來改進查詢客戶端所擁有的各種服務的體系結構,但是要使用已經擁有的方法:

<%= 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
  )
) %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM