Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails验证忽略作用域的唯一性_Ruby On Rails_Activerecord_Validates Uniqueness Of - Fatal编程技术网

Ruby on rails Rails验证忽略作用域的唯一性

Ruby on rails Rails验证忽略作用域的唯一性,ruby-on-rails,activerecord,validates-uniqueness-of,Ruby On Rails,Activerecord,Validates Uniqueness Of,我对Rails非常陌生,Rails/ActiveRecord似乎忽略了我继承的项目中的验证声明的唯一性上的作用域,这让我遇到了麻烦。我有以下型号: class User < ActiveRecord::Base … validates_uniqueness_of :email, scope: :brand_id, allow_nil: true … belongs_to :brand … end 看起来第二个查询正在进行正确的唯一性检查,但第一个查询忽略了范围 如果您

我对Rails非常陌生,Rails/ActiveRecord似乎忽略了我继承的项目中的
验证声明的唯一性上的作用域,这让我遇到了麻烦。我有以下型号:

class User < ActiveRecord::Base
  …
  validates_uniqueness_of :email, scope: :brand_id, allow_nil: true
  …
  belongs_to :brand
  …
end
看起来第二个查询正在进行正确的唯一性检查,但第一个查询忽略了范围


如果您有任何关于进一步查看什么或如何调试的提示,我们将不胜感激。

模型中的逻辑没有问题。还有其他东西正在阻止记录保存

你能把整个模型放进去吗

class Artwork < ApplicationRecord

  ...

  validates_uniqueness_of :artwork_file_name, scope: :game_id

  ...

end


2.3.1 :810 > Artwork.new(artwork_file_name: 'asd', game_id: 100).save
   (12.5ms)  BEGIN
  Artwork Exists (92.1ms)  SELECT  1 AS one FROM `artworks` WHERE `artworks`.`artwork_file_name` = BINARY 'asd' AND `artworks`.`game_id` = 100 LIMIT 1
  SQL (64.1ms)  INSERT INTO `artworks` (`game_id`, `artwork_file_name`, `created_at`, `updated_at`) VALUES (100, 'asd', '2017-02-17 10:25:25', '2017-02-17 10:25:25')
   (17.9ms)  COMMIT
 => true
2.3.1 :811 > Artwork.new(artwork_file_name: 'asd', game_id: 100).save
   (0.2ms)  BEGIN
  Artwork Exists (0.5ms)  SELECT  1 AS one FROM `artworks` WHERE `artworks`.`artwork_file_name` = BINARY 'asd' AND `artworks`.`game_id` = 100 LIMIT 1
   (6.1ms)  ROLLBACK
 => false
2.3.1 :812 > Artwork.new(artwork_file_name: 'asd', game_id: 101).save
   (0.2ms)  BEGIN
  Artwork Exists (45.4ms)  SELECT  1 AS one FROM `artworks` WHERE `artworks`.`artwork_file_name` = BINARY 'asd' AND `artworks`.`game_id` = 101 LIMIT 1
  SQL (6.7ms)  INSERT INTO `artworks` (`game_id`, `artwork_file_name`, `created_at`, `updated_at`) VALUES (101, 'asd', '2017-02-17 10:26:05', '2017-02-17 10:26:05')
   (6.3ms)  COMMIT
 => true
2.3.1 :813 >
class ArtworkArtwork.new(Artwork_file_name:'asd',game_id:100)。保存
(12.5毫秒)开始
Artwork Exists(92.1ms)从'artworks'中选择1,其中'artworks'。'Artwork\u file\u name`=二进制'asd'和'artworks`.'game\u id`=100限制1
SQL(64.1ms)插入到“artworks”(游戏id)、“artwork”文件名、“created”处、“Update”处)值中(100、“asd”、“2017-02-17 10:25:25”、“2017-02-17 10:25:25”)
(17.9毫秒)提交
=>正确
2.3.1:811>Artwork.new(Artwork_file_name:'asd',game_id:100)。保存
(0.2ms)开始
Artwork Exists(0.5ms)从'artworks'中选择1,其中'artworks'。'Artwork\u file\u name`=二进制'asd'和'artworks`.'game\u id`=100限制1
(6.1ms)回滚
=>错误
2.3.1:812>Artwork.new(Artwork_file_name:'asd',game_id:101)。保存
(0.2ms)开始
Artwork Exists(45.4ms)从'artworks'中选择1,其中'artworks'。'Artwork\u file\u name`=二进制'asd'和'artworks`.'game\u id`=101限制1
SQL(6.7ms)插入'artworks'('game_id'、'artwork_file_name'、'created_at'、'Update_at')值(101、'asd'、'2017-02-17 10:26:05'、'2017-02-17 10:26:05')
(6.3ms)提交
=>正确
2.3.1 :813 >

事实证明,这是Deave的“可验证”行为,这增加了它自己对电子邮件字段的唯一验证。

我追踪到Deave,以验证电子邮件的唯一性。
class Artwork < ApplicationRecord

  ...

  validates_uniqueness_of :artwork_file_name, scope: :game_id

  ...

end


2.3.1 :810 > Artwork.new(artwork_file_name: 'asd', game_id: 100).save
   (12.5ms)  BEGIN
  Artwork Exists (92.1ms)  SELECT  1 AS one FROM `artworks` WHERE `artworks`.`artwork_file_name` = BINARY 'asd' AND `artworks`.`game_id` = 100 LIMIT 1
  SQL (64.1ms)  INSERT INTO `artworks` (`game_id`, `artwork_file_name`, `created_at`, `updated_at`) VALUES (100, 'asd', '2017-02-17 10:25:25', '2017-02-17 10:25:25')
   (17.9ms)  COMMIT
 => true
2.3.1 :811 > Artwork.new(artwork_file_name: 'asd', game_id: 100).save
   (0.2ms)  BEGIN
  Artwork Exists (0.5ms)  SELECT  1 AS one FROM `artworks` WHERE `artworks`.`artwork_file_name` = BINARY 'asd' AND `artworks`.`game_id` = 100 LIMIT 1
   (6.1ms)  ROLLBACK
 => false
2.3.1 :812 > Artwork.new(artwork_file_name: 'asd', game_id: 101).save
   (0.2ms)  BEGIN
  Artwork Exists (45.4ms)  SELECT  1 AS one FROM `artworks` WHERE `artworks`.`artwork_file_name` = BINARY 'asd' AND `artworks`.`game_id` = 101 LIMIT 1
  SQL (6.7ms)  INSERT INTO `artworks` (`game_id`, `artwork_file_name`, `created_at`, `updated_at`) VALUES (101, 'asd', '2017-02-17 10:26:05', '2017-02-17 10:26:05')
   (6.3ms)  COMMIT
 => true
2.3.1 :813 >