唯一性验证适用于两个字段的组合。我的问题是修补一个确实有效的新记录会抛出错误ActiveRecord::RecordNotUnique PG::UniqueViolation: ERROR: duplicate key value violates unique constraint
,而不是它执行下面方法的else
部分。为什么它会抛出错误而不是执行else部分?如何改变这个?
def create
first_node = Node.find_by(id: params[:first_node_id])
second_node = Node.find_by(id: params[:second_node_id])
link = first_node.where_first_links.build(create_params)
if link.save
render json: link, status: :created
else
render json: link, message: "unable", status: :bad_request
end
end
在迁移文件中:
add_index :links, [:first_node_id, :second_node_id], unique: true
模型验证:
before_save :order_nodes
validates :first_node_id, presence: true
validates :second_node_id, presence: true
validates :first_node_id, uniqueness: { scope: :second_node_id }
def order_nodes
if first_node_id > second_node_id
first = first_node_id
second = second_node_id
self.first_node_id = second
self.second_node_id = first
if direction == '0'
self.direction = 1
elsif direction == '1'
self.direction = 0
end
end
end
答案 0 :(得分:1)
这很可能意味着:
尝试更改您的回调:
if(isNaN(number) || charactersLength !=9 )
为:
before_save :order_nodes
注意:在这种情况下,您必须假设您的字段可能无效并相应地重写您的回调。