我是一个Ruby新手所以请原谅,如果其中一些完全无知。我想设置以下关联:
我不想有任何独立的表格来创作作品和艺术家。用户只需创建转录 - 转录表单具有艺术家和作文的文本字段,应动态创建数据库条目(如果它们尚不存在)。
我应该如何设置模型?我应该在转录中使用一些虚拟属性吗?
# transcription.rb
def artist_name
artist.name if self.artist
end
def artist_name=(name)
self.artist = Artist.find_or_create_by_name(name) unless name.blank?
end
然后使用我之前找到或创建过的艺术家创建带find_or_create_by_name
的作文?
任何帮助表示赞赏!提前致谢
答案 0 :(得分:1)
您无法在转录中设置艺术家,因为艺术家有很多作品而不是转录,您需要通过合成来访问艺术家。我希望这段代码能更好地解释它。
我很累,可能搞砸了,但我们走了(未经测试):
# transcription.rb
attr_writer :composition_name, :artist_name
before_save :set_artist_and_composition
validates_presence_of :artist_name, :composition_name
def composition_name
composition.name
end
def artist_name
composition.artist.name
end
def set_artist_and_composition
artist = Artist.find_or_create_by_name(@artist_name)
self.composition = Composition.find_or_create_by_name(@composition_name)
self.composition.artist = artist
end