# find() and then save() with select()

**URL:** <https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125>\
**Category:** rubyonrails-talk\
**Created:** [March 4, 2012, 9:09am UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125 "2012-03-04T09:09:20Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![arturturik](https://avatars.discourse-cdn.com/v4/letter/a/54ee81/32.png) [@arturturik](https://discuss.rubyonrails.org/u/arturturik)\
**Post date:** [March 4, 2012, 9:09am UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/1 "2012-03-04T09:09:20Z")

</div>

Does anybody know how to make the following code work:

invoice = Invoice.select('id, date').find(1) invoice.conf\_date = Date.today invoice.save

As it's mentioned in guides "If the select method is used, all the returning objects will be read only" the code below throws an ActiveRecord::MissingAttributeError exception.

Any help will be highly appreciated!

---

<div class="post-metadata">

**Author:** ![Colin\_Law1](https://avatars.discourse-cdn.com/v4/letter/c/91b2a8/32.png) [@Colin\_Law1](https://discuss.rubyonrails.org/u/Colin_Law1)\
**Post date:** [March 4, 2012, 12:37pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/2 "2012-03-04T12:37:45Z")

</div>

There is no need for the select in the find, just do invoice = Invoice.find(1) invoice.conf\_date = Date.today invoice.save

Colin

---

<div class="post-metadata">

**Author:** ![arturturik](https://avatars.discourse-cdn.com/v4/letter/a/54ee81/32.png) [@arturturik](https://discuss.rubyonrails.org/u/arturturik)\
**Post date:** [March 4, 2012, 2:38pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/3 "2012-03-04T14:38:36Z")

</div>

Unfortunately, i have to use select() since the table consists of many BLOB columns which i prefer not to fetch.

---

<div class="post-metadata">

**Author:** ![Michael\_Pavling](https://avatars.discourse-cdn.com/v4/letter/m/8dc957/32.png) [@Michael\_Pavling](https://discuss.rubyonrails.org/u/Michael_Pavling)\
**Post date:** [March 4, 2012, 2:53pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/4 "2012-03-04T14:53:02Z")

</div>

But why are fetching at all? If all you're doing is changing the date (although I see you select "date" [1] and update "conf\_date"), why not use .update? [http://apidock.com/rails/ActiveRecord/Base/update/class](http://apidock.com/rails/ActiveRecord/Base/update/class)

[1] \*Very\* bad name for a column...

---

<div class="post-metadata">

**Author:** ![Peter\_Vandenabeele1](https://avatars.discourse-cdn.com/v4/letter/p/59ef9b/32.png) [@Peter\_Vandenabeele1](https://discuss.rubyonrails.org/u/Peter_Vandenabeele1)\
**Post date:** [March 4, 2012, 2:54pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/5 "2012-03-04T14:54:14Z")

</div>

It seems "update\_attribute" could do this.

(that is updating one field, without fetching the entire record with the large blobs).

1.9.3p0 :005 \> o = Order.select('uuid, name').first &nbsp;&nbsp;Order Load (0.8ms) SELECT uuid, name FROM "orders" ORDER BY orders.created\_at LIMIT 1 =\> #\<Order uuid: "6529fb26-6b6f-402c-a9af-cba0d7f4f288", name: "..."\> 1.9.3p0 :006 \> o.update\_attribute :name, 'test' &nbsp;&nbsp;&nbsp;(0.3ms) BEGIN &nbsp;&nbsp;&nbsp;(68.6ms) UPDATE "orders" SET "name" = 'test', "updated\_at" = '2012-03-04 14:53:02.743113' WHERE "orders"."uuid" = '6529fb26-6b6f-402c-a9af-cba0d7f4f288' &nbsp;&nbsp;&nbsp;(30.1ms) COMMIT =\> true

HTH,

Peter

---

<div class="post-metadata">

**Author:** ![Michael\_Pavling](https://avatars.discourse-cdn.com/v4/letter/m/8dc957/32.png) [@Michael\_Pavling](https://discuss.rubyonrails.org/u/Michael_Pavling)\
**Post date:** [March 4, 2012, 2:54pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/6 "2012-03-04T14:54:23Z")

</div>

PS and if your table is arranged in such a way to prevent you from populating records, maybe a bit of remodelling those BLOBs out to associations would be in order?

---

<div class="post-metadata">

**Author:** ![arturturik](https://avatars.discourse-cdn.com/v4/letter/a/54ee81/32.png) [@arturturik](https://discuss.rubyonrails.org/u/arturturik)\
**Post date:** [March 4, 2012, 3:08pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/7 "2012-03-04T15:08:29Z")

</div>

1. update\_attribute makes no valition 2. Column names are dummy 3. Model.update(id, attrs) is the way worth trying.

I just thought there is more convenient way to do that.

---

<div class="post-metadata">

**Author:** ![arturturik](https://avatars.discourse-cdn.com/v4/letter/a/54ee81/32.png) [@arturturik](https://discuss.rubyonrails.org/u/arturturik)\
**Post date:** [March 4, 2012, 3:09pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/8 "2012-03-04T15:09:46Z")

</div>

PS and if your table is arranged in such a way to prevent you from populating records, maybe a bit of remodelling those BLOBs out to associations would be in order?

That's not an option.

---

<div class="post-metadata">

**Author:** ![arturturik](https://avatars.discourse-cdn.com/v4/letter/a/54ee81/32.png) [@arturturik](https://discuss.rubyonrails.org/u/arturturik)\
**Post date:** [March 4, 2012, 3:10pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/9 "2012-03-04T15:10:15Z")

</div>

\* 1. update\_attribute makes no validation

---

<div class="post-metadata">

**Author:** ![Norm2](https://avatars.discourse-cdn.com/v4/letter/n/3bc359/32.png) [@Norm2](https://discuss.rubyonrails.org/u/Norm2)\
**Post date:** [March 4, 2012, 4:17pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/10 "2012-03-04T16:17:41Z")

</div>

But update\_attributes does use validation. You can use update\_attributes with only a single attribute.

---

<div class="post-metadata">

**Author:** ![arturturik](https://avatars.discourse-cdn.com/v4/letter/a/54ee81/32.png) [@arturturik](https://discuss.rubyonrails.org/u/arturturik)\
**Post date:** [March 4, 2012, 4:34pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/11 "2012-03-04T16:34:26Z")

</div>

Nope, i can't. It gets not saved.

---

<div class="post-metadata">

**Author:** ![Colin\_Law1](https://avatars.discourse-cdn.com/v4/letter/c/91b2a8/32.png) [@Colin\_Law1](https://discuss.rubyonrails.org/u/Colin_Law1)\
**Post date:** [March 4, 2012, 4:35pm UTC](https://discuss.rubyonrails.org/t/find-and-then-save-with-select/63125/12 "2012-03-04T16:35:47Z")

</div>

> Nope, i can't. It gets not saved.

Well you are doing it wrong then.

Colin
