2010-01-16 38 views
4

這可能是非常簡單的事情,但我不能爲了我的生活得到這個工作。出於某種原因,自動保存實際上並不是自動保存基礎模型。無法獲取Rails:自動保存選項在模型上工作

這裏是我的架構:

create_table :albums do |t| 
    t.string :title 
    t.text :review 

    t.timestamps 
end 

create_table :songs do |t| 
    t.integer :album_id 
    t.string :name 
    t.integer :length 
end 

create_table :cover_arts do |t| 
    t.integer :album_id 
    t.integer :artist 
end 

這裏是我的模型:

class Album < ActiveRecord::Base 
    has_many :songs, :autosave => true 
    has_one :cover_art, :autosave => true 
end 

class CoverArt < ActiveRecord::Base 
    belongs_to :album 
end 

class Song < ActiveRecord::Base 
    belongs_to :album 
end 

當我做在IRB以下與封面的專輯已在數據庫:

a = Album.find(1) 
a.title = "New title" 
a.cover_art.artist = "New Artist" 
a.save 

它更新專輯記錄而不是CoverArt記錄。我究竟做錯了什麼?

回答

-1

根據docs,你必須保存父記錄,而不是設置一個新的值,以便子記錄也保存。

post = Post.find(1) 
post.title # => "The current global position of migrating ducks" 
post.author.name # => "alloy" 

post.title = "On the migration of ducks" 
post.author.name = "Eloy Duran" 

post.save 
post.reload 
post.title # => "On the migration of ducks" 
post.author.name # => "Eloy Duran" 
+0

對不起,我沒有把上面的信息留下 - 我其實也是這樣做的。所以這也不是問題 - 我編輯了我的帖子以澄清。 – mrjake2 2010-01-16 03:33:39

+0

也許你可以包含你在控制檯中獲得的輸出? – tfwright 2010-01-16 03:35:13

+0

嗨弗洛伊德,我在控制檯得到的唯一輸出是一個返回值爲「真」的保存。查看development.log文件,這是因爲相冊對象已成功保存。但是,cover_art對象不是。它根本不會顯示在日誌文件中。所以不幸的是,在控制檯或日誌文件中沒有錯誤消息來表明問題可能是什麼。 – mrjake2 2010-01-17 04:59:44

1

當這發生在我身上,我找到了betternestedset插件是覆蓋更新方法不使用alias_method_chain或其他任何東西,以保持現有的調用鏈。我替換了betternestedset的更新重寫,並在其位置放置了一個簡單的attr_readonly調用(類似於該插件中現有的attr_protected調用)。也許這會幫助別人。