2011-07-07 56 views
1

我有2個表格。例如「水果」和「食物」當我使用相應的模型爲水果表創建新條目時,如何將此對象和屬性保存到名爲All的另一個表中?Ruby on Rails:將模型的對象和屬性保存到另一個表格

或更簡單:如何在保存新條目時更新另一個表格?

我需要的東西,如「更新值其中id = X」

+0

我讀過您的其他評論,如果您對rails的ruby完全陌生,我強烈建議您完成本教程:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book。基本上,您將構建帶有一系列軌道功能的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對像保存事件執行操作。

對重複數據要小心,如果您只是試圖創建一個包含與其他表相同的信息的表,那麼您可能需要以不同方式查詢數據。

+0

我alrerady知道這一點,但我怎樣才能訪問另一個表的模型?我需要像「更新值其中id = x」 –

+0

@Daniel Ruf:你是否因某種原因無法使用ActiveRecord作爲其他表? – cam

+0

不,但我需要一個例子,我如何能做到這一點像在MySQL更新...在哪裏...像...我有點困惑,寫一個全新的現有應用程序作爲一個血腥的新手紅寶石鐵軌,但直接與腳手架,activerecord(我沒有聽說過,但我現在知道)一開始並不是那麼容易,還添加了很多很多自定義方法 –

0

在這種情況下,最好的做法是使用observers

1)添加到您的Gemfile

gem 'rails-observers' 

2)執行命令

bundle install 

3)創建新的文件app/models/fruit_observer.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)添加到您的application.rb

config.active_record.observers = :fruit_observer 

5)運行服務器/控制檯,並檢查了這一點!

+0

這個問題是相當古老,已經回答;-) –

相關問題