我有一个简单的应用程序,在数据库中有 3 个表和“多对多”关系。
# Model Employee
class Employee < ActiveRecord::Base
has_and_belongs_to_many :phonenumbers
accepts_nested_attributes_for :phonenumbers, :allow_destroy => true
attr_accessible :last_name, :first_name, :middle_name, :phonenumbers_attributes
end
# Model Phonenumber
class Phonenumber < ActiveRecord::Base
has_and_belongs_to_many :employees
attr_accessible :number
accepts_nested_attributes_for :employees
end
我有带有 'employee_id' 和 'phonenumber_id' 列的 'employees_phonenumbers' 连接表。
# View
<%= form_for @employee, :url => { :action => :create } do |f| %>
<%= f.label "Last name" %>
<%= f.text_field :last_name %>
<%= f.label "First name" %>
<%= f.text_field :first_name %>
<%= f.label "Middle name" %>
<%= f.text_field :middle_name %>
<%= f.fields_for :phonenumbers do |phonenumber| %>
<%= phonenumber.label "Phone number" %>
<%= phonenumber.telephone_field :number %>
<% end %>
<%= f.submit "Create" %>
<% end %>
# Controller
def create
@employee = Employee.new(params[:employee])
@employee.save ? (redirect_to :action => :index) : (render "new")
end
现在,如果我创建一个用户:“John”,电话号码为“555”,就可以了。
但是,如果我想创建一个具有相同电话号码“555”的用户“Larry”,则数据库中有一个重复的“555”条目。
我该如何防止这种情况?
更新:我的逻辑是:如果有数字'555',那么不要创建一个新的,使用现有的。如果没有这样的号码,则创建一个新号码并使用它。