Unncessary SQL generated by ActiveRecord
I have a user model which has_many messages.
So in my controller I did
u = User.find(session[:user_id])
messageSubject = params[:msgSub] || "No Subject"
message = u.messages.find_by_subject(messageSubject)
if message.nil?
u.messages << subject =""> messageSubject)
message = u.messages.last
end
Here is the output in development.log
User Columns (0.000000) SHOW FIELDS FROM users
Message Columns (0.016000) SHOW FIELDS FROM messages
Message Load (0.000000) SELECT * FROM messages WHERE (messages.user_id = 1) AND (messages.`subject1 = 'No Subject' ) LIMIT 1
Couldn't find a message with name No Subject. Creating a new message.
Message Load (0.000000) SELECT * FROM messages WHERE (messages.user_id = 1) ORDER BY position
SQL (0.000000) BEGIN
Message Load (0.000000) SELECT * FROM messages WHERE (subject = 'No Subject') LIMIT 1
Message Load (0.000000) SELECT * FROM messages WHERE (user_id = 1) ORDER BY position DESC LIMIT 1
SQL (0.000000) INSERT INTO messages (`subject`, `updated_at`, `user_id`, `position`, `created_at`) VALUES('No Subject', '2006-02-01 12:41:48', 1, 1, '2006-02-01 12:41:48')
SQL (0.000000) COMMIT
Why is ActiveRecord issuing a SELECT * FROM messages WHERE (subject = 'No Subject') LIMIT 1 command?
So in my controller I did
u = User.find(session[:user_id])
messageSubject = params[:msgSub] || "No Subject"
message = u.messages.find_by_subject(messageSubject)
if message.nil?
u.messages << subject =""> messageSubject)
message = u.messages.last
end
Here is the output in development.log
User Columns (0.000000) SHOW FIELDS FROM users
Message Columns (0.016000) SHOW FIELDS FROM messages
Message Load (0.000000) SELECT * FROM messages WHERE (messages.user_id = 1) AND (messages.`subject1 = 'No Subject' ) LIMIT 1
Couldn't find a message with name No Subject. Creating a new message.
Message Load (0.000000) SELECT * FROM messages WHERE (messages.user_id = 1) ORDER BY position
SQL (0.000000) BEGIN
Message Load (0.000000) SELECT * FROM messages WHERE (subject = 'No Subject') LIMIT 1
Message Load (0.000000) SELECT * FROM messages WHERE (user_id = 1) ORDER BY position DESC LIMIT 1
SQL (0.000000) INSERT INTO messages (`subject`, `updated_at`, `user_id`, `position`, `created_at`) VALUES('No Subject', '2006-02-01 12:41:48', 1, 1, '2006-02-01 12:41:48')
SQL (0.000000) COMMIT
Why is ActiveRecord issuing a SELECT * FROM messages WHERE (subject = 'No Subject') LIMIT 1 command?

0 Comments:
Post a Comment
<< Home