2012-06-19 38 views
0

我想將Model.attribute變成Attribute.models。用現有數據創建has_many/belongs_to

例如我現在有Model.first.attribute => "string",我想補充belongs_to :attributes到Model.rb,然後創建Attribute.rb後,加has_many :models

我添加的一個欄改成了型號表:attribute_id,我試圖做類似

Model.each do |m| 
    a = Attribute.find_or_create_by_name(m.attribute) 
    m.update_attribute("attribute_id", a.id) 
end 

這是正確的方法來實現這一目標嗎?

+0

你的數據庫看起來像什麼? –

+0

@joeshmo你是什麼意思?這是MySQL。我只是試圖將Model的字符串列中的一個變成它自己的與原始模型has_many關係的模型。 – aperture

+0

你如何在標題中引用的「現有數據」中做到這一點? –

回答

0

如果模型has_many :attributes(和屬性belongs_to :model),那麼屬性模型中應該有model_id

那麼你可以做

Model.all.each do |m| 
    m.attributes.create!(:name => m.attribute) unless m.attributes.find_by_name(m.attribute) 
end 

UPDATE

做過什麼,似乎是對我那麼好。唯一的問題是你會有一個列attribute和另一個名爲attribute_id與模型中的belongs_to。我不知道當你輸入Model.first.attribute時ActiveRecord如何反應。

+0

我正在這樣做。模型'belongs_to:attribute',我需要從模型屬性創建屬性記錄​​,然後將模型分配給新創建的屬性記錄(與模型的屬性列名稱相同),而無需創建模型的新實例。 – aperture

相關問題