My Invoice model has an address_id attribute, and I don't want this address_id to change FOREVER. So I don't want this to happen outside the class:
invoice.address_id = 1
invoice.address = some_address
Rails automatically adds this address_id attribute to the model from the invoice table, so how can I declare this attribute private/protected? Calling
attr_protected :address_id
is most likely not the solution since based on the documentation it only prevents mass assignments.
Thanks!
Not as pretty as a one liner, but code below should work (and you could always do some metaprogramming to write an 'immutable' method)
def address_id=(id)
if new_record?
write_attribute(:address_id, id)
else
raise 'address is immutable!'
end
end
You want attr_readonly
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With