Ruby on rails Rails activerecord属性=

Ruby on rails Rails activerecord属性=,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在这样做: @person.attributes = params[:person] 有人能告诉我为什么使用attributes=会在我的日志中显示大量SQL吗 我看到一些选择,甚至更新 我发誓我没有进行“保存”——所以我不知道为什么设置属性会触发查询 我缺少一个前后过滤器吗 谢谢。据我所知,在标准型号上设置属性不会导致任何SELECT或UPDATE调用。当我与脚本/控制台会话同时运行日志时,可以进一步看到这一点: 谢谢你,瑞安。我发现这是因为我们有自定义扩展,它重写了基本属性=方法:)但

我正在这样做:

@person.attributes = params[:person]
有人能告诉我为什么使用attributes=会在我的日志中显示大量SQL吗

我看到一些选择,甚至更新

我发誓我没有进行“保存”——所以我不知道为什么设置属性会触发查询

我缺少一个前后过滤器吗


谢谢。

据我所知,在标准型号上设置属性不会导致任何
SELECT
UPDATE
调用。当我与脚本/控制台会话同时运行日志时,可以进一步看到这一点:


谢谢你,瑞安。我发现这是因为我们有自定义扩展,它重写了基本属性=方法:)但谢谢你的深入回答。你有在作业中被触发的行为吗?
>> f = Forum.first

==> ./log/development.log <==
  SQL (0.1ms)   SET SQL_AUTO_IS_NULL=0
  Forum Load (0.4ms)   SELECT * FROM `forums` ORDER BY title asc LIMIT 1
  Forum Columns (12.6ms)   SHOW FIELDS FROM `forums`
=> #<Forum id: 1, title: "Welcome to rBoard!", description: "This is an example forum for Rboard.", is_visible_to_id: nil, topics_created_by_id: nil, position: 1, parent_id: nil, last_post_id: 1, last_post_forum_id: nil, topics_count: 1, posts_count: 4, category_id: nil, active: true, open: true>
>> f.attributes
=> {"position"=>1, "is_visible_to_id"=>nil, "open"=>true, "topics_count"=>1, "title"=>"Welcome to rBoard!", "last_post_forum_id"=>nil, "posts_count"=>4, "id"=>1, "category_id"=>nil, "parent_id"=>nil, "topics_created_by_id"=>nil, "last_post_id"=>1, "description"=>"This is an example forum for Rboard.", "active"=>true}
>> f.attributes = _
=> {"position"=>1, "is_visible_to_id"=>nil, "open"=>true, "topics_count"=>1, "title"=>"Welcome to rBoard!", "last_post_forum_id"=>nil, "posts_count"=>4, "id"=>1, "category_id"=>nil, "parent_id"=>nil, "topics_created_by_id"=>nil, "last_post_id"=>1, "description"=>"This is an example forum for Rboard.", "active"=>true}
>> f.attributes
=> {"position"=>1, "is_visible_to_id"=>nil, "open"=>true, "topics_count"=>1, "title"=>"Welcome to rBoard!", "last_post_forum_id"=>nil, "posts_count"=>4, "id"=>1, "category_id"=>nil, "parent_id"=>nil, "topics_created_by_id"=>nil, "last_post_id"=>1, "description"=>"This is an example forum for Rboard.", "active"=>true}
>> attr = _
=> {"position"=>1, "is_visible_to_id"=>nil, "open"=>true, "topics_count"=>1, "title"=>"Welcome to rBoard!", "last_post_forum_id"=>nil, "posts_count"=>4, "id"=>1, "category_id"=>nil, "parent_id"=>nil, "topics_created_by_id"=>nil, "last_post_id"=>1, "description"=>"This is an example forum for Rboard.", "active"=>true}
>> attr["position"] = 2
=> 2
>> f.save
  SQL (0.2ms)   BEGIN
=> true
>>   SQL (0.2ms)   COMMIT
f.attributes = attr
=> {"position"=>2, "is_visible_to_id"=>nil, "open"=>true, "topics_count"=>1, "title"=>"Welcome to rBoard!", "last_post_forum_id"=>nil, "posts_count"=>4, "id"=>1, "category_id"=>nil, "parent_id"=>nil, "topics_created_by_id"=>nil, "last_post_id"=>1, "description"=>"This is an example forum for Rboard.", "active"=>true}
>> WARNING: Can't mass-assign these protected attributes: id
f.save
  SQL (0.2ms)   BEGIN
  Forum Update (20.3ms)   UPDATE `forums` SET `position` = 2 WHERE `id` = 1
  SQL (27.2ms)   COMMIT
=> true