2011-07-07 10 views
1

私は2つのテーブルを持っています。たとえば "Fruits"と "Food" Fruitsテーブルの新しいエントリを対応するモデルで作成すると、このオブジェクトと属性をAllという名前の他のテーブルに保存するにはどうすればよいですか?Ruby on Rails:モデルのオブジェクトと属性を別のテーブルに保存する

それ以上:新しいエントリを保存するときに別のテーブルを更新するにはどうすればよいですか?

私は

+0

私はあなたの他のコメントを読んでいます。もしあなたがRuby on Railsを初めて知りましたら、このチュートリアルを完成させることを強くお勧めします:http://ruby.railstutorial.org/ruby-on-rails-tutorialbook基本的には、一連のレール機能を備えたTwitterクローンを構築し、良いレールアプリケーションを作るための素早い方法を学びます。 –

+0

には別のチュートリアルがありました –

答えて

4

:あなたは「プライベート」を書きたくない場合だけ知っているので

class Fruits < ActiveRecord::Base 

    after_save :update_the_all_table 

    private 

     def update_the_all_table 
      allobject = All.find(self.id) 
      allobject.someattribute = self.someattribute # self is the fruit 
      allobject.save 
     end 

end 

は、あなたはまた、次の操作を行うことができます!

class Fruits < ActiveRecord::Base 

    after_save { |fruit| 
     allobject = All.find(fruit.id) 
     allobject.someattribute = fruit.someattribute 
     allobject.save 
    } 

end 
+0

保存する前に?または保存した後にこれをそのまま使用しますか? –

+0

ええ、可能性のあるコールバックについては、http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.htmlを参照してください。 –

+0

別のメドードで「プライベート」を使用する必要はありませんでした。メソッドの直前またはモデルの最初の行で? –

1

あなたが保存などのイベントに対してアクションを実行するためにCallbacksを使用することができます「ID = Xの更新値」のようなものを必要としています。

他のテーブルと同じ情報をすべて含むテーブルを作成しようとしているだけの場合は、データを異なる方法で照会するだけで十分です。あなたはこのような何かしなければならない

+0

私はこれを知っていますが、他のテーブルのモデルにどうやってアクセスできますか? "id = xの更新値"のようなものが必要です –

+0

@ Daniel Ruf:何らかの理由で他のテーブルにActiveRecordを使用できませんか? – cam

+0

いいえ、しかし、私はどのように私は更新とmysqlのようにこれを行うことができます例が必要です...どこか...私はちょっと混乱して、ルビーの血まみれの初心者として、私は今まで知っていたが、私が知っていた)activerecordは初めに簡単ではなく、多くの多くのカスタムメソッドを追加しました。 –

0

この場合のベストプラクティスはobserversです。

1)あなたのGemfileに入れる:

gem 'rails-observers' 

2)ファイル名を指定して実行:あなたのapplication.rbに追加)

class FruitObserver < ActiveRecord::Observer 
    def after_save(fruit) 
    # Any actions with other models and tables must stay here. 
    # Example: 
    All.create(
     name: fruit.name, 
     entitable_type: fruit.class.to_s, 
     entitable_id: fruit.id 
    ) 
    end 
end 

4:

bundle install 

3)新しいファイルapp/models/fruit_observer.rbを作成します。

config.active_record.observers = :fruit_observer 

5)server/consoleを実行してこれをチェックしてください!

+0

この質問はかなり古く、すでに回答済みです;-) –

関連する問題