Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 铁路运行协会';在创建时进行验证?_Ruby On Rails - Fatal编程技术网

Ruby on rails 铁路运行协会';在创建时进行验证?

Ruby on rails 铁路运行协会';在创建时进行验证?,ruby-on-rails,Ruby On Rails,我们有三节课 class a has_many :b has_many :c, through: b end class b belongs_to :a belongs_to :c end class c has_many :b has_many :a, through: :b validates_uniqueness_of :name end 当我试图创建classa的实例时,如果数据库中有两个classc的对象具有相同的名称值,我惊讶地发现classc上的验

我们有三节课

class a
  has_many :b
  has_many :c, through: b
end

class b
  belongs_to :a
  belongs_to :c
end

class c
  has_many :b
  has_many :a, through: :b
  validates_uniqueness_of :name
end
当我试图创建class
a
的实例时,如果数据库中有两个class
c
的对象具有相同的
名称
值,我惊讶地发现class
c
上的验证正在运行! 当我根本不应该接触class
c
行时,为什么要运行验证

@马克斯要求举个例子

创建新的Rails 5项目后,请执行以下操作:

rails g model a 
rails g model c name:string
rails g model b a:references c:references
编辑a.rb使其看起来像:

class A < ApplicationRecord
  has_many :b
  has_many :c, through: :b
end
class C < ApplicationRecord
  has_many :b
  has_many :a, through: :b
end
修改C类以添加:

  validates_uniqueness_of :name
在rails控制台中:

 A.create!(c_ids: [1])
你会得到一个例外:

ActiveRecord::RecordInvalid (Validation failed: C is invalid)

正如我所说,我知道数据是错误的,但我只是惊讶于验证正在运行。我不认为Rails 4中会发生这种情况。

有许多关联在默认情况下验证关联。如果您想避开此问题,可以将
有许多关联的
上的
验证
键设置为
(默认情况下为真)。你可以在这里看到更多关于
的选项:

B类
如何属于
B类
?在已经有多个特定名称之后,是否在C上添加了模型验证?是否接受嵌套属性,或者你正在为a类记录编写一个名为
c_id
的数组?你能不能创建一个最小的可验证示例来演示你正在谈论的行为?@max添加了如何创建一个示例。太棒了!对于这是否是正确的做法,我有两种看法,但感谢您的解释。我同意,覆盖这一关键可能不是正确的做法!
ActiveRecord::RecordInvalid (Validation failed: C is invalid)