0
私は、オブジェクトリレーションを含むプロジェクトと、関連付けによって相互に作用するクラスを構築しています。Ruby:オブジェクトの関係
具体的には、.find_or_create_by_nameメソッドに問題があります。このメソッドは、アーティストを名前で検索または作成し、名前プロパティでオブジェクトの一意性を維持します。これは機能します。 次の部分は、存在しない場合、アーティストの新しいインスタンスを作成する必要があります。これは機能しません。
class Artist
attr_accessor :name, :song
@@all = []
def initialize(name)
@name = name
@songs = []
end
def self.name=
@name
end
def add_song(song)
@songs << song
end
def songs
@songs
end
def self.all
@@all
end
def save
self.class.all << self
end
def self.new_by_name(name)
artist_name = Song.new(name)
artist_name
end
def self.create_by_name(name = nil)
artist = self.new_by_name(name)
artist.save
artist
end
def self.find_by_name(name = nil)
@@all.detect{|x| x.name == name}
end
def self.find_or_create_by_name(name)
if find_by_name(name) == nil
create_by_name(name)
else
find_by_name(name)
end
end
end
。 @all || = [];終わり。 – Kris
また、 'def self.name'はクラスメソッドです。私はそれを削除する必要があると思います。 – Kris
'find_or_create_by_name'を' find_by_name(name) 'に単純化することもできます。 create_by_name(name) 'です。 – Kris