2011-08-30 48 views
0

考慮:爲什麼更新模型中的屬性會導致查詢另一個表?

message = Message.find(1) 

當我這樣做:

message.update_attributes(:created_at => ...) 

我在日誌中看到:

SELECT `users`.* FROM `users` WHERE (`users`.`id` = 5) LIMIT 1 
UPDATE `messages` SET `created_at` = '2011-08-30 12:41:01', `updated_at` = '2011-08-30 12:41:03' WHERE (`messages`.`id` = 1) 

爲什麼它會查詢與id=5用戶?

一些相關代碼:

class CreateMessages < ActiveRecord::Migration 
    def self.up 
    create_table :messages do |t| 
     t.integer "publisher_id", :null => false 
     ... 
     t.timestamps 
    end 
    add_index("messages", "publisher_id") 
    execute "ALTER TABLE messages ADD FOREIGN KEY (publisher_id) REFERENCES users(id)" 
    end 

    def self.down 
    drop_table :messages 
    end 
end 
+2

你之前設置的過濾器有任何(一個常見的一種可能是?在執行操作之前檢查用戶是否已登錄) – Paul

+0

您確定用戶表查詢不是由您的應用程序的另一部分執行嗎?如在,檢查登錄狀態或設置當前用戶變量等。 –

+1

@Paul:你說得對。這是一個'before_save'。請將其作爲回答發佈... –

回答

相關問題