If you ever have to do multiple actions with activerecord, you should group it into a transaction like so:
Post.transaction do posts.each do |post| post = Post.new(:body=>'Whatever') post.save! end end
This will rollback too if the save fails.
If you ever have to do multiple actions with activerecord, you should group it into a transaction like so:
Post.transaction do posts.each do |post| post = Post.new(:body=>'Whatever') post.save! end end
This will rollback too if the save fails.
Here is a cool way you can update columns in a table without writing any SQL using ActiveRecord. Suppose you have a form with checkboxes that are for deleting posts for the ones that are checked:
<input type="checkbox" name="posts[]" value="<%= post.id %>">
Now you can update this in the method of your controller that this form posts to:
Post.update_all({:removed=>true}, {:id=>params[:posts]})
ActiveRecord will take of the fact that you want to update 1 record or multiple!
The other day I had to display the number of children items an object had so I decided to do the following:
# Controller @customers = Customer.find(:all, :include=>[:receive_payments]) #View <%= customer.receive_payments.count %>
While this worked for what I needed, it executed the following sql every iteration:
SELECT count(*) AS count_all FROM "receive_payments" WHERE ("receive_payments".customer_ref_list_id = E'850000-1071531366')
I thought this wasn’t right considering I used an association, however when you use count, it forces the use of count(*) on the database. This is where size comes in!!!!
<%= customer.receive_payments.size %>
Now we get the same results without the extra database counts!
Instead of spending hours trying to write something custom to convert your hash into xml or vice versa, you can do it in one line. If you are already in a Rails environment, you are good to go, but if using ruby, include the ActiveSupport gem:
require 'rubygems' require 'active_support'
Now that you have, we can convert a xml to a hash:
hash = Hash.from_xml(xml_stream)
And a hash to xml is stupid simple:
xml = hash.to_xmlThere you have it, simple xml to hash and hash to xml!