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 に答える