1

我是 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使用我之前找到或创建的艺术家创建构图?

任何帮助表示赞赏!提前致谢

4

1 回答 1

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
于 2011-07-29T02:03:06.313 回答