Ruby on rails 4 使用别名时无法为HABTM联接表设定种子
我有一个客户和工人模型。工人可以将客户列入黑名单。如果被列入黑名单,客户和工作人员将不再配对。在我的工人模型中Ruby on rails 4 使用别名时无法为HABTM联接表设定种子,ruby-on-rails-4,Ruby On Rails 4,我有一个客户和工人模型。工人可以将客户列入黑名单。如果被列入黑名单,客户和工作人员将不再配对。在我的工人模型中 has_and_belongs_to_many :blacklisted_clients, class_name: 'Client', join_table: 'blacklisted_clients_workers', association_foreign_key: 'blacklisted_client_id' has_and_belongs_to_many :work
has_and_belongs_to_many :blacklisted_clients, class_name: 'Client',
join_table: 'blacklisted_clients_workers',
association_foreign_key: 'blacklisted_client_id'
has_and_belongs_to_many :workers,
join_table: 'blacklisted_clients_workers',
foreign_key: 'blacklisted_client_id'
在我的客户模型中
has_and_belongs_to_many :blacklisted_clients, class_name: 'Client',
join_table: 'blacklisted_clients_workers',
association_foreign_key: 'blacklisted_client_id'
has_and_belongs_to_many :workers,
join_table: 'blacklisted_clients_workers',
foreign_key: 'blacklisted_client_id'
联接表,blacklisted\u clients\u workers
,由两列组成,worker\u id
和blacklisted\u client\u id
。我已经试着与
Worker.create!(
blacklisted_clients: BlacklistedClient.where(id: (1..200).to_a.shuffle.take(3)),
)
当我这样做的时候,我会得到一个错误
NameError: uninitialized constant BlacklistedClient
我做错了什么?当您编写BlacklistedClient时。其中(…)主动支持将查找BlacklistedClient模型,这是您的客户端模型 您已经为非模型客户创建了一个关系作为黑名单客户
尝试用客户端而不是黑名单客户端包装相同的内容 当您编写BlacklistedClient时。其中(…)主动支持将查找BlacklistedClient模型,该模型是您的客户端模型 您已经为非模型客户创建了一个关系作为黑名单客户
尝试用客户端而不是黑名单客户端包装相同的内容 如果我使用
blacklisted\u clients:Client.where(id:(1..200).to\u a.shuffle.take(3)
,错误消失,但没有任何内容被植入联接表中。这是因为您的查询返回空白。更多黑名单\u客户端:如果它是工作模型的字段,则应该被黑名单\u客户端id:然后是一些值。还有一件事是client.create!(…)将一次创建一个记录,因此您需要有一个循环,该循环逐个获取客户端id,并在工作模型中插入一个记录。问题已解决-VK29是正确的。行黑名单\u客户端:黑名单客户端。其中(id:(1..200)。to \u a.shuffle.take(3))
,应该是黑名单\u客户端:client.where(id:(1..200)。to \u a.shuffle.take(3))
。我遇到的另一个问题是,我在种子文件中创建工作模型后创建了客户端模型。因此,当我尝试创建联接表时,客户端模型为空。我只是将对客户端模型的种子设定移到对工作模型的种子设定之上,一切正常。VK29在使用循环时不正确。客户端。其中(id:[])可以接受一个数组。(1..200)。to_a.shuffle.take(3)
就是这样做的。在此之前,我已经创建了200个客户端。(1..200)。to_a.shuffle.take(3)
给了我一个随机数组,其中3个id介于1和200之间。由此生成的SQL是从“clients”中选择“clients.id”,其中“clients”。(153,97,166)中的“id”
作为一个例子。我很高兴能够帮助您。:)并感谢随机数组的事情……当时我意识到了这一点,无法回忆起它。还是谢谢你的信息@RamJetIf我使用黑名单的客户机:Client.where(id:(1..200).to_a.shuffle.take(3)
,错误消失,但没有任何内容被植入联接表中。这是因为您的查询返回空白。更多黑名单\u客户端:如果它是工作模型的字段,则应该被黑名单\u客户端id:然后是一些值。还有一件事是client.create!(…)将一次创建一个记录,因此您需要有一个循环,该循环逐个获取客户端id,并在工作模型中插入一个记录。问题已解决-VK29是正确的。行黑名单\u客户端:黑名单客户端。其中(id:(1..200)。to \u a.shuffle.take(3))
,应该是黑名单\u客户端:client.where(id:(1..200)。to \u a.shuffle.take(3))
。我遇到的另一个问题是,我在种子文件中创建工作模型后创建了客户端模型。因此,当我尝试创建联接表时,客户端模型为空。我只是将对客户端模型的种子设定移到对工作模型的种子设定之上,一切正常。VK29在使用循环时不正确。客户端。其中(id:[])可以接受一个数组。(1..200)。to_a.shuffle.take(3)
就是这样做的。在此之前,我已经创建了200个客户端。(1..200)。to_a.shuffle.take(3)
给了我一个随机数组,其中3个id介于1和200之间。由此生成的SQL是从“clients”中选择“clients.id”,其中“clients”。(153,97,166)中的“id”
作为一个例子。我很高兴能够帮助您。:)并感谢随机数组的事情……当时我意识到了这一点,无法回忆起它。还是谢谢你的信息@冲压发动机