这可能是一个愚蠢的问题,但是我想确保自己了解具有唯一性模型约束的“作用域”字段。
我遵循了本指南:https://dankim.io/mutual-friendship-rails/,以了解如何在Rails中处理“ Friends”关联。一方面,它讨论了如何进行唯一性约束:
validates :friend, presence: true, uniqueness: { scope: :user }
(其中使用friendship
模型。
这就是说friend_id
字段永远不能与相同的user_id
字段重复吗?
这还不是因为:
validates :user, presence: true, uniqueness: { scope: :friend }
在user_id
具有重复的friend_id
的情况下,用户不应出现多次。还是我误解了scope
在这里的工作方式?
谢谢!
答案 0 :(得分:2)
你是对的。范围是一种奇特的说法,只允许一个二元组(用户,朋友)。
如果您在数据库上设置了索引(这是避免使用唯一性验证避免竞争条件所必需的),您将做完全相同的事情:
Using OledbConn As New OleDbConnection("Conn String")
OledbConn.Open()
Using t_customerCMD As New OleDbCommand("UPDATE t_customer SET [Col1]=@Col1,[Col2]=@Col2 WHERE [codeCust]=@codeCust", OledbConn)
With t_customerCMD
.Parameters.Add("@Col1", SqlDbType.VarChar).Value = TextBox1.Text
.Parameters.Add("@Col2", SqlDbType.VarChar).Value = TextBox2.Text
.Parameters.Add("@codeCust", SqlDbType.Int).Value = CInt(txtIDCust.Text) 'Assumes ID is integer
.ExecuteNonQuery()
End With
End Using
OledbConn.Close()
End Using
End Sub
答案 1 :(得分:2)
差异是在哪个字段中进行检查,因为关系是有方向的(并且使其成为非方向的,因此在文章中创建了逆关系)。
在您的示例中-对于重复记录,将是无法验证的反比关系
另外,对于uniqueness
-验证,具有相应的数据库唯一索引总是很有用的(因为验证节省不是原子的)