2011-03-27 83 views
0

我一直在使用Rails 3.0.5和Ruby 1.9.2,並且我注意到一個新記錄不會被保存或不能立即使用。Rails 3保存記錄問題

例如

def create  
    @some_record = Pool.new(params[:pool]) 
     @some_record.users.push(current_user) 
    if params[:commit] == "Add More"   
     @some_record.save   
     @some_record.do_something 
    elsif params[:commit] == "Save" 
     do_something_else(params) 
    elsif params[:commit] == 'Cancel' 
     redirect_to user_url(current_user) 
    end  
redirect_to some_other_url(current_user) 
end 

所以,當我保存記錄並調用some_record.do_something保存對象無法提供即時的。 current_user.some_records不包含新添加的記錄,但current_user.some_records.all顯示新保存的記錄。但是在控制檯上,我可以用current_user.some_records查看新創建的記錄。

我敢肯定,我遺漏了Rails 3的一些基礎知識。我也嘗試過與current_user.some_records.build(params[:some_record]一樣的嘗試,並且遇到同樣的問題。 Rails 3是否立即保存對象,或者是否存在某種延遲寫入/保存,因爲Rails 3.0.3不會出現同樣的問題。

另外我沒有使用像authlogic/devise這樣的身份驗證插件,我只是將current_user對象保存到會話中。我不確定我做錯了什麼。我很感激任何幫助嗎?

它也有不少一對多some_record和用戶

+0

對不起,我的錯誤很大。保存在推送到關聯數組後被調用。 – Sid 2011-03-27 10:40:48

回答

1
current_user.some_records 

不包含新添加的記錄,因爲你沒有指定@some_record.users.push(current_user)後保存操作之間的關聯。 您只需在作業後添加.save即可使用。

1

模型結構是不是從你的問題不清楚,但我們認爲current_userbelongs_tosome_records 要強制數據庫中讀取試試這個:

current_user.some_records(true) 

默認情況下forcereload = false,重寫這個你應該通過true

+0

我不明白。你的意思是數據庫讀取不是默認設置,需要明確調用。這種設置的優點/用途是什麼。 – Sid 2011-03-27 10:48:56

+0

不開發模式隱式地重新加載所有內容。 – Sid 2011-03-27 10:50:11

+0

「如果已從數據庫中檢索到此對象的關聯對象,則會返回緩存的版本」 - 從這裏http://guides.rubyonrails.org/association_basics.html – megas 2011-03-27 11:05:39