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

标签 mysql sql ruby-on-rails ruby-on-rails-3 update-attributes

给定:

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

最佳答案

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

http://guides.rubyonrails.org/action_controller_overview.html#filters

关于mysql - 为什么更新模型中的属性会导致查询另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243417/

相关文章:

sql - 将聚合计数拆分为行

sql - 如何使用 `OR` 子句控制 ActiveRecord 查询中的括号位置

ruby-on-rails - Rails 回调在不同环境下表现不同

php - mysql 多个 SELECT 语句

mysql - 如何跟踪上一行状态计数

php - MySQL输入TINYINT语法

javascript - skip_before_filter :authenticate_user! 不适用于 AJAX 调用

php - 从关联数组中提取值时遇到问题

php - MYSQL如果某个字段返回0则选择另一个查询并连接

mysql - 根据另一个表中的 count(*) 值更新表中的多个列