我有2個表格。例如「水果」和「食物」當我使用相應的模型爲水果表創建新條目時,如何將此對象和屬性保存到名爲All的另一個表中?Ruby on Rails:將模型的對象和屬性保存到另一個表格
或更簡單:如何在保存新條目時更新另一個表格?
我需要的東西,如「更新值其中id = X」
我有2個表格。例如「水果」和「食物」當我使用相應的模型爲水果表創建新條目時,如何將此對象和屬性保存到名爲All的另一個表中?Ruby on Rails:將模型的對象和屬性保存到另一個表格
或更簡單:如何在保存新條目時更新另一個表格?
我需要的東西,如「更新值其中id = X」
你必須做這樣的事情:
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
和之前保存?或者或者只是在保存後才能使用? –
是的,閱讀所有關於可能的回調在:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html –
沒有必要使用另一種方法的「私人」,我必須使用它,究竟在哪裏?在方法之前或模型的第一行? –
您可以使用Callbacks對像保存事件執行操作。
對重複數據要小心,如果您只是試圖創建一個包含與其他表相同的信息的表,那麼您可能需要以不同方式查詢數據。
我alrerady知道這一點,但我怎樣才能訪問另一個表的模型?我需要像「更新值其中id = x」 –
@Daniel Ruf:你是否因某種原因無法使用ActiveRecord作爲其他表? – cam
不,但我需要一個例子,我如何能做到這一點像在MySQL更新...在哪裏...像...我有點困惑,寫一個全新的現有應用程序作爲一個血腥的新手紅寶石鐵軌,但直接與腳手架,activerecord(我沒有聽說過,但我現在知道)一開始並不是那麼容易,還添加了很多很多自定義方法 –
在這種情況下,最好的做法是使用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)運行服務器/控制檯,並檢查了這一點!
這個問題是相當古老,已經回答;-) –
我讀過您的其他評論,如果您對rails的ruby完全陌生,我強烈建議您完成本教程:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book。基本上,您將構建帶有一系列軌道功能的Twitter克隆,並且您將學習如何製作好軌道應用程序的快速方法。 –
另一個教程開始 –