2016-04-07 5 views
0

私はRoRを初めて使用しています。私は何をしようとしているのですか?これは私が持っているものです:Ruby on Rails - 別のクラス内のデータベーステーブルを作成

class Artist < ActiveRecord:Base 

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

私は単純化のために短縮しましたが、あなたはポイントを得る。今私は "アルバム"と呼ばれる別のモデルを持っています。私はアーティストデータベースの側にアルバムデータベースのエントリを作成したいのですが、アルバムクラスに入っていないので、私はそれをAlbums.create(...)として作成します。アーティストのsearchメソッド内のAlbumsクラス内の関数を呼び出すことは可能でしょうか?以下のような

何か:

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 

答えて

1

だろう:

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

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

あなたは、一般的にトランザクション内でエラーがあるかどう半レコードを持つ方法を乱雑を避けるためにことをやりたいです。

ここでmethodを使用している理由がわかりませんが、これは名前として使用する必要はありません。これはRubyによって予約されています。それは実際にメソッドを呼び出すのではなく、単にそのメソッドに関する情報を返します。

privateまたはprotectedでない限り、あるクラスが別のクラスでメソッドを呼び出せない理由はありません。時にはそれは良いアイデアではない、良い方法があるからです。

0

は、私が実際に答えを見つけました。同じ質問を探している人は、「クラス」メソッドで他のメソッドを呼び出すことができます。あなたは両方を作成したい場合は、あなたのアーティストを作成する場合は、

class Artist 
    has_many :albums 
end 

class Album 
    belongs_to :artist 
end 

:だから私の場合、それは、これを行うのRailsの方法は、あなたの関係を設定し、関連レコードを作成するために、これらのを使用することですAlbum.method(search)