ruby-on-rails-3 - 为什么 :id in Rails 3. 2.3 的批量分配不会引发错误?

标签 ruby-on-rails-3

看起来 update_attributes 不允许我更改 id(因此它是 protected ),但是为什么 Rails 没有抛出与其他 protected 属性相同的错误?

> rails new mass_assignment_test
> cd mass_assignment_test
> rails g model User name:string
> rake db:migrate
> rails console
>> u = User.create(:name => "ben")
>> u.update_attributes(:id => 5)
=> true
>> u.id
=> 1
>> u.update_attributes(:created_at => Time.now)
ActiveModel::MassAssignmentSecurity:Error

这是rails生成的模型(app/models/user.rb):

class User < ActiveRecord::Base
  attr_accessible :name
end

最佳答案

记录的 id 受 Rails 本身保护:

# activerecord-3.1.3/lib/active_record/base.rb:1961
def self.attributes_protected_by_default
  default = [ primary_key, inheritance_column ]
  default << 'id' unless primary_key.eql? 'id'
  default
end

您可以通过以下方式绕过此问题:

u.update_attributes!({:id => 5}, :without_protection => true)

另外,请不要这样做。 :) 这会让你的代码难以维护...

关于ruby-on-rails-3 - 为什么 :id in Rails 3. 2.3 的批量分配不会引发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11436318/

相关文章:

ruby-on-rails - 获取昨天的日期

ruby-on-rails - Rails 3 : How to identify after_commit action in observers?(创建/更新/销毁)

ruby-on-rails - Rails 3 路由 : add action to all resources in namespace

ruby-on-rails - rails 轮胎 elasticsearch 奇怪的错误

ruby-on-rails - Rails.cache - 工作但不工作

ruby-on-rails - 我正在使用 Rails Castomniauth 并收到此错误

ruby-on-rails - 将数据组合到 1 个模型属性

ruby-on-rails-3 - 回形针文件大小验证错误消息

ruby-on-rails-3 - Rails 3:如何验证是否允许空白(“”,但不允许nil(数据库中为NULL)

ruby-on-rails-3 - Rails查询速度