给定:
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/