0
驗證唯一性適用於兩個字段的組合。我的問題是修補一個確認的新記錄,將引發錯誤ActiveRecord::RecordNotUnique PG::UniqueViolation: ERROR: duplicate key value violates unique constraint
,而不是執行下面方法的else
部分。爲什麼它會拋出錯誤而不是執行else部分?如何改變這一點?.save拋出錯誤而不是執行條件的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
謝謝!這工作完美。完美的解釋也! – Nick
@尼克,保重並閱讀我附加的說明。 – Omnigazer