Rails 3 MySQL 2 reports an error in what looks to be valid SQL syntax

Posted by John Judd on Stack Overflow See other posts from Stack Overflow or by John Judd
Published on 2012-09-26T03:27:54Z Indexed on 2012/09/26 3:37 UTC
Read the original article Hit count: 158

Filed under:
|
|
|

I am trying to use the following bit of code to help in seeding my database. I need to add data continually over development and do not want to have to completely reseed data every time I add something new to the seeds.rb file. So I added the following function to insert the data if it doesn't already exist.

def AddSetting(group, name, value, desc)
    Admin::Setting.create({group: group, name: name, value: value, description: desc}) unless Admin::Setting.find_by_sql("SELECT * FROM admin_settings WHERE group = '#{group}' AND name = '#{name}';").exists?
end

AddSetting('google', 'analytics_id', '', 'The ID of your Google Analytics account.')
AddSetting('general', 'page_title', '', '')
AddSetting('general', 'tag_line', '', '')

This function is included in the db/seeds.rb file. Is this the right way to do this?

However I am getting the following error when I try to run it through rake.

rake aborted!
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group = 'google' AND name = 'analytics_id'' at line 1: SELECT * FROM admin_settings WHERE group = 'google' AND name = 'analytics_id';

Tasks: TOP => db:seed
(See full trace by running task with --trace)

Process finished with exit code 1

What is confusing me is that I am generating correct SQL as far as I can tell. In fact my code generates the SQL and I pass that to the find_by_sql function for the model, Rails itself can't be changing the SQL, or is it?

SELECT * FROM admin_settings WHERE group = 'google' AND name = 'analytics_id';

I've written a lot of SQL over the years and I've looked through similar questions here. Maybe I've missed something, but I cannot see it.

© Stack Overflow or respective owner

Related posts about mysql

Related posts about ruby-on-rails