Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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中,在嵌入式对象形式中使用validates_university_时,如何尊重:scope?_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 在Rails中,在嵌入式对象形式中使用validates_university_时,如何尊重:scope?

Ruby on rails 在Rails中,在嵌入式对象形式中使用validates_university_时,如何尊重:scope?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个图书模型,它有很多章节(属于一本书) 我想确保章节标题的唯一性,但仅限于一本书的范围。关键在于,用于创建章节的表单嵌入到图书模型的表单中(图书模型接受:章节的_嵌套属性_) 在章节模型中: validates_uniqueness_of( :chapter_title, :scope => :book_id, :case_sensitive => false, :message => "No book can have multiple chapters

我有一个图书模型,它有很多章节(属于一本书)

我想确保章节标题的唯一性,但仅限于一本书的范围。关键在于,用于创建章节的表单嵌入到图书模型的表单中(图书模型接受:章节的_嵌套属性_)

在章节模型中:

validates_uniqueness_of( :chapter_title, :scope => :book_id, :case_sensitive => false, :message => "No book can have multiple chapters with the same title.")
有人能解释一下怎么做吗?或者为什么会发生这种情况?

这是因为Book获取的章节的Book\u id设置为NULL,并且在验证之前它没有设置它们的Book\u id b/c在这一步它没有id

第一种解决方案是使用Book.build\u chapter()方法,但它需要为每个章节分别调用一个方法

第二是使用和创建一本书,如:

  book_attrs = {
    :chapters_attributes => [
      { :title => 'Intro' },
      { :title => 'Core' },
      { :title => 'Outro'}
    ]
  }

  book = Book.create(book_attrs)

他不是这么说的吗?
  book_attrs = {
    :chapters_attributes => [
      { :title => 'Intro' },
      { :title => 'Core' },
      { :title => 'Outro'}
    ]
  }

  book = Book.create(book_attrs)