2016-04-07 25 views
0

içinde bir veritabanı tablosu oluşturmak için RoR'da yeniyim ve yapmaya çalıştığım şey için uygun yöntemin ne olduğundan emin değilim. Yani bu benim elimde:Ruby on Rails - Farklı sınıf

class Artist < ActiveRecord:Base 

    def self.search(search) 
     Artist.create(:artist_name => x, artist_info => ... etc) 

Basitlik için kısalttım ama siz anladınız. Şimdi "Album" adında başka bir modelim var. Sanatçı tarafı boyunca bir Albüm veritabanı girişi oluşturmak istiyorum ancak bunu Albümler sınıfının içinde olmadığından açıkça Albums.create(...) olarak oluşturuyorum. Artist'teki search yöntemimdeki Albümler sınıfındaki bir işlevi çağırmak mümkün mü? gibi

şey:

class Artist < ActiveRecord:Base 

     def self.search(search) 
      Artist.create(:artist_name => x, artist_info => ... etc) 
      Albums.method(search) 

Class Album < ActiveRecord:Base 
     def self.method(search) 
      etc 

cevap

1

olurdu :

Artist.transaction do 
    artist = Artist.create!(
    artist_name: x, 
    artist_info: y 
) 

    album = artist.albums.create!(...) 
end 

genellikle bir işlem içinde bir hata varsa yarım kalmış kayıtları ile yöntemini dağınık olmaması için bunu yapmak ister.

Neden burada method kullanıyorsunuzdur, bu bir ad olarak kullanmanız gereken bir şey değil, Ruby tarafından saklıdır. Bu aslında yöntemi çağırmaz, sadece bunun hakkında bilgi verir.

private veya protected ya da protected olmadığı sürece, bir sınıfın başka bir yöntemden diğerine çağrı yapmasının bir nedeni yoktur. Bazen daha iyi bir yol olduğu için iyi bir fikir değil.

0

Aslında cevabını buldu. Aynı soruyu arayan herkes için "class" .method ile başka yöntemler de arayabilirsiniz. Her iki oluşturmak istiyorsanız sizin sanatçı oluştururken,

class Artist 
    has_many :albums 
end 

class Album 
    belongs_to :artist 
end 

: Yani benim durumumda bunu yapmanın Raylar yolu ilişkilerinizi kurmak ve ilgili kayıtları oluşturmak için bu kullanmaktır Album.method(search)