Ruby on rails 为什么可以';我不能用update设置布尔列吗?

Ruby on rails 为什么可以';我不能用update设置布尔列吗?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在制作一个用户管理页面。对于我正在创建的系统,用户需要获得批准。有时候,会有很多用户需要批准,所以我想让这变得简单。我将其存储为一个名为approved的布尔列 我记得当时的情景,觉得很合适。然而,我遇到的问题可以追溯到ActiveRecord::Base#update update在本例中效果良好: >> User.all.map(&:username) => ["ben", "fred"] >> h = {"1"=>{'username'=&g

我正在制作一个用户管理页面。对于我正在创建的系统,用户需要获得批准。有时候,会有很多用户需要批准,所以我想让这变得简单。我将其存储为一个名为
approved
的布尔列

我记得当时的情景,觉得很合适。然而,我遇到的问题可以追溯到
ActiveRecord::Base#update

update
在本例中效果良好:

>> User.all.map(&:username)
=> ["ben", "fred"]
>> h = {"1"=>{'username'=>'benjamin'}, "2"=>{"username"=>'frederick'}}
=> {"1"=>{"username"=>"benjamin"}, "2"=>{"username"=>"frederick"}}
>> User.update(h.keys, h.values)
=> ...
>> User.all.map(&:username)
=> ["benjamin", "frederick"]
但不是这个:

>> User.all.map(&:approved)
=> [true, nil]
>> h = {"1"=>{'approved'=>'1'}, "2"=>{'approved'=>'1'}}
>> User.update(h.keys, h.values)
=> ...
>> User.all.map(&:approved)
=> [true, nil]
当我测试时,从
'1'
切换到
true
并没有什么区别


我做错了什么?

可能是您在user.rb中使用的

attr_protected :approved

关闭--它是可访问的属性!奇怪的是,我可以通过执行
user.approved=true
直接在模型上设置它。不应该是这样的,对吧?(我使用的是
authlogic
——也许
扮演的角色是真实的
在扮演角色?)。。。不适用。有一段时间没有阅读文档:“[attr_accessible]指定可通过批量分配设置的模型属性白名单”