Mysql 为什么更新模型中的属性会导致查询另一个表?

Mysql 为什么更新模型中的属性会导致查询另一个表?,mysql,sql,ruby-on-rails,ruby-on-rails-3,update-attributes,Mysql,Sql,Ruby On Rails,Ruby On Rails 3,Update Attributes,鉴于: 当我这样做时: message = Message.find(1) 我在日志中看到: message.update_attributes(:created_at => ...) 为什么它查询id为5的用户 一些相关代码: SELECT `users`.* FROM `users` WHERE (`users`.`id` = 5) LIMIT 1 UPDATE `messages` SET `created_at` = '2011-08-30 12:41:01', `update

鉴于:

当我这样做时:

message = Message.find(1)
我在日志中看到:

message.update_attributes(:created_at => ...)
为什么它查询id为5的用户

一些相关代码:

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)
class CreateMessagesfalse
...
t、 时间戳
结束
添加索引(“消息”、“发布者id”)
执行“更改表消息添加外键(发布者id)引用用户(id)”
结束
def自动关闭
下拉列表:消息
结束
结束

看起来您可能已经设置了某种类型的前置过滤器。这些通常用于在方法运行之前执行操作/检查,例如检查用户是否登录


您是否设置了任何before筛选器?(常见的一种可能是在执行操作之前检查用户是否已登录)您确定应用程序的其他部分不会执行Users表查询吗?例如,检查登录状态或设置当前用户变量等@Paul:你说得对。保存之前是一个
。请将其作为答案发布。。。
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