我正在構建一個Rails 4.2.4應用程序,其中有Units和Medics。當我編輯每個單位時,我有兩個醫療點,incharge
和attendant
。我想要一些方法來驗證incharge_id
和attendant_id
是不一樣的。這樣我就不能將自己指定爲單位上的兩個職位。聯盟ID的Rails驗證
這是我的模型和表單視圖的樣子。
unit.rb
class Unit < ActiveRecord::Base
belongs_to :attendant, :foreign_key => :attendant_id, :class_name => 'Medic'
belongs_to :incharge, :foreign_key => :incharge_id, :class_name => 'Medic'
belongs_to :unit_status
end
medic.rb
class Medic < ActiveRecord::Base
has_many :units
end
單位/ _form.html.erb
<%= form_for(@unit) do |f| %>
<%= f.label 'Attendant'%>
<%= f.collection_select(:attendant_id, Medic.order('name ASC'), :id, :name, {}) %>
<%= f.label 'In Charge'%>
<%= f.collection_select(:incharge_id, Medic.order('name ASC'), :id, :name, {}) %>
<%= f.label 'Unit Status'%>
<%= f.collection_select(:unit_status_id, UnitStatus.order("status ASC"), :id, :status, {})%>
<%= f.submit "Update" %>
<% end %>
因此,在總結如果我編輯了一個單位,並且我不小心將「1」的id
分配給單位,我想錯誤並給出某種信息,「不能將同一個醫生分配到兩個位置」。類似的東西。
我能想到的唯一的事情,就是以某種方式篩選控制器的PARAMS說如果attendant_id
和incharge_id
的PARAMS的是==然後重定向到edit_unit_path並顯示提示信息,「你不能指定相同醫生兼任「。
看起來好像在模型端進行驗證而不是在控制器中填充邏輯,但我不確定如何同時驗證兩個不同列的唯一性。
除了服務器端驗證之外,如果不允許所選醫療服務器出現在其他軍醫領域,例如,動態填充下拉菜單,那麼UX會是一個很好的選擇。 –
@DaveNewton感謝您的提示,理想情況下,這是我的一些coffeescript/JS的目標,但我只是想首先完成服務器端驗證。 :) – nulltek