我正在构建一个Rails 4.2.4应用程序,我有单位和医生。当我编辑每个单元时,我有两个医疗点,incharge
和attendant
。我想要一些方法来验证incharge_id
和attendant_id
是不一样的。这样我就无法将自己指定为单位的两个位置。
以下是我的模型和表单视图。
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 %>
总而言之,如果我编辑一个单元并且我意外地分配了id
&#34; 1&#34;对于单位,我想错误并给出某种消息,&#34;不能将同一个医生分配到两个位置&#34;。这样的事情。
我唯一能想到的是,以某种方式过滤控制器中的参数,说明attendant_id
和incharge_id
的参数是否= =然后重定向到edit_unit_path并显示一条flash消息,&#34;你不能将同一个医生分配到两个位置&#34;。
似乎最好在模型端进行验证而不是在控制器中填充逻辑,但我不确定如何同时验证两个不同列的唯一性。
答案 0 :(得分:0)
我在Unit
模型上想出了这个。
validate :attendant_and_incharge
def attendant_and_incharge
errors.add(:attendant_id, "can't be the same as the incharge") if attendant_id == incharge_id
end
这不允许我将相同的id保存到attendant_id和incharge_id的单元模型中。它无声地失败并指向units_path。只需要在控制器中放置一些条件,以便在失败时重定向到编辑路径。 (ThumbsUp)