mirror of
https://github.com/github/rails.git
synced 2026-01-09 14:48:01 -05:00
update_attribute should not update readonly attributes
[#5106 state:resolved] Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
@@ -105,6 +105,8 @@ module ActiveRecord
|
||||
# Updates a single attribute and saves the record without going through the normal validation procedure
|
||||
# or callbacks. This is especially useful for boolean flags on existing records.
|
||||
def update_attribute(name, value)
|
||||
raise ActiveRecordError, "#{name.to_s} is marked as readonly" if self.class.readonly_attributes.include? name.to_s
|
||||
|
||||
changes = record_update_timestamps || {}
|
||||
|
||||
if name
|
||||
|
||||
@@ -17,13 +17,14 @@ require 'models/comment'
|
||||
require 'models/minimalistic'
|
||||
require 'models/warehouse_thing'
|
||||
require 'models/parrot'
|
||||
require 'models/minivan'
|
||||
require 'models/loose_person'
|
||||
require 'rexml/document'
|
||||
require 'active_support/core_ext/exception'
|
||||
|
||||
class PersistencesTest < ActiveRecord::TestCase
|
||||
|
||||
fixtures :topics, :companies, :developers, :projects, :computers, :accounts, :minimalistics, 'warehouse-things', :authors, :categorizations, :categories, :posts
|
||||
fixtures :topics, :companies, :developers, :projects, :computers, :accounts, :minimalistics, 'warehouse-things', :authors, :categorizations, :categories, :posts, :minivans
|
||||
|
||||
def test_create
|
||||
topic = Topic.new
|
||||
@@ -220,6 +221,11 @@ class PersistencesTest < ActiveRecord::TestCase
|
||||
assert !Topic.find(1).approved?
|
||||
end
|
||||
|
||||
def test_update_attribute_for_readonly_attribute
|
||||
minivan = Minivan.find('m1')
|
||||
assert_raises(ActiveRecord::ActiveRecordError) { minivan.update_attribute(:color, 'black') }
|
||||
end
|
||||
|
||||
def test_update_attribute_with_one_changed_and_one_updated
|
||||
t = Topic.order('id').limit(1).first
|
||||
title, author_name = t.title, t.author_name
|
||||
|
||||
1
activerecord/test/fixtures/minivans.yml
vendored
1
activerecord/test/fixtures/minivans.yml
vendored
@@ -2,3 +2,4 @@ cool_first:
|
||||
minivan_id: m1
|
||||
name: my_minivan
|
||||
speedometer_id: s1
|
||||
color: blue
|
||||
|
||||
@@ -3,4 +3,7 @@ class Minivan < ActiveRecord::Base
|
||||
|
||||
belongs_to :speedometer
|
||||
has_one :dashboard, :through => :speedometer
|
||||
end
|
||||
|
||||
attr_readonly :color
|
||||
|
||||
end
|
||||
|
||||
@@ -300,6 +300,7 @@ ActiveRecord::Schema.define do
|
||||
t.string :minivan_id
|
||||
t.string :name
|
||||
t.string :speedometer_id
|
||||
t.string :color
|
||||
end
|
||||
|
||||
create_table :minimalistics, :force => true do |t|
|
||||
|
||||
Reference in New Issue
Block a user