如何在 ruby​​ on rails 中使每个 user_id 的列数据唯一

Posted

技术标签:

【中文标题】如何在 ruby​​ on rails 中使每个 user_id 的列数据唯一【英文标题】:How to make column data unique for each user_id in ruby on rails 【发布时间】:2013-05-03 03:58:32 【问题描述】:

问题是我有一个表customers,其中包含一些与客户相关的列,例如customersID。 我还有一列user_id,这样客户数据只与一个用户有关。

class Customers
belongs_to :user
end

class Users
has_many :customers
end

现在我在 customersID 上有了 :unique。但这使得每个 customerID 在整个表格中都是唯一的。 我想要的是每个 user_id 的 customerID 是唯一的。

有什么想法或建议吗?

编辑:问题似乎有点不清楚。

我有一个表用户

user1
user2
user3

我还有一个表customers,每个客户从创建他的用户那里获得一个user_id。用户可以输入一个customerID,每个用户都应该是唯一的。

customerID=1 user_id1
customerID=2 user_id1
customerID=1 user_id3
customerID=3 user_id1
customerID=1 user_id2
...

我在 CustomersController 中通过 @customers = current_user.customers 收集客户数据。 customerID 是一个简单的t.integer "customerID"

【问题讨论】:

Errr...我不确定是否了解全部情况,但是...您为什么不直接使用belongs_to :customerhas_many :users 呢? 【参考方案1】:

为什么不通过客户表上的索引强制对 Customer_id, iser_id 的唯一性?您可以创建类似的迁移

add_index_to_costumers.rb

class AddIndexToCustomers < ActiveRecord::Migration
  def change
    add_index :customers, [:customerID,:user_id], unique: true
  end
end

它应该在数据库级别确保 customerID/user_id 对是唯一的。如果我很好理解你的问题,那就是你所期望的。

希望对你有帮助

干杯

【讨论】:

所以每个customerID 都是唯一的。我想要的是对于每个用户,customerID 从 1 计数到 infi 并且是唯一的。希望说清楚了【参考方案2】:

您似乎希望客户拥有一个用户,对吗?试试这样的:

class Customer
  has_one :user
end

class User
  belongs_to :customer
end

这样您就可以将客户绑定到一个特定的 user_id。然后你可以这样做:

@customer = Customer.where(name: "company name").first
@user = @customer.user  #this will find the customer's unique user

【讨论】:

以上是关于如何在 ruby​​ on rails 中使每个 user_id 的列数据唯一的主要内容,如果未能解决你的问题,请参考以下文章

通过单击 Ruby on Rails 中的按钮生成表单

我是如何快速入门 Ruby on Rails 的

在 Ruby on Rails 3 应用程序中实现搜索?

ruby on rails如何安装

如何使用 Ruby on Rails 模拟 twitter api?

Ruby on Rails 3 - 为每个请求重新加载 lib 目录