我正在尝试为书籍,章节和笔记建模。
我有以下内容:
class Book < ApplicationRecord
has_many :chapters
has_many :notes
end
class Chapter < ApplicationRecord
belongs_to :book
has_many :notes
end
class Note < ApplicationRecord
belongs_to :chapter
end
我可以创建书和笔记。
创建新的Note
时,我想做的是创建新的Chapter
或将现有的分配给note
。换种说法:我试图在父级甚至还没有存在之前就从孩子创建一个父级,或者为该子级分配一个现成的父级。
这是诸如acts_as_taggable_on
之类的gem提供的功能。我已经尝试过使用嵌套表单,但无法使其接近我想要的。我想知道我的架构对于这种使用是否正确?您提供的任何指导将不胜感激。
答案 0 :(得分:1)
在NotesController的create方法中,您可以执行类似的操作
parent_chapter = Chapter.find_or_create_by(name: 'How To Program')
# parent_chapter is now either the existing chapter by that name or a new one
new_note = Note.new(params[:note])
new_note.chapter = parent_chapter # or new_note.chapter_id = parent_chapter.id
new_note.save
find_or_create_by方法是我在这里需要的。 如果该方法在您的Rails版本中不推荐使用,请尝试first_or_create,就像这样
parent_chapter = Chapter.where(name: 'How To Program').first_or_create