I have finally learnt how to use script/runner and have written a
script with the intention of updating the status attribute of my
"Blog" objects every 24 hours to "published".
I have written a script (which I will paste below).
I seem to always get the error below which relates to
ActiveRecord::ReadOnlyRecord when I try to save/update the object.
2867:in `create_or_update': ActiveRecord::ReadOnlyRecord
Here is the script:
=============== Start ===============
class Blog < ActiveRecord::Base
new_blogs = Blog.status_name_does_not_equal_all(['live',
live_status = Status.find_by_name('live')
new_blogs.each do |new_blog|
new_blog.status = live_status
# new_blog.update_attribute(status, live_status)
=============== End ===============
Reading from http://api.rubyonrails.org/ under the doc for "find", I
do understand that the :readonly flag is set ONLY if ":joins" was
specified. In my case, I had never done so.
I used "updates" and that failed. Read http://www.dcmanges.com/blog/33
and found that I have to use update_attributes but in this case, I
have already set my "status" using the new status object (ie.
new_blog.status = live_status )
I then tried using save/save! (in desperation) and fell flat on my
face with an error.
When I update objects in my rails app, it's all fine but when I run a
script through script/runner, I constantly get this ReadOnly error.
When I run pretty much the same thing on script/console, the Blog
record happily gets updated without a hick. Here's an extract:
==================Extract from script/console - start