我正在尝试使用以下代码来帮助为我的数据库播种。我需要在开发过程中不断添加数据,并且不希望每次向 seed.rb 文件添加新内容时都必须完全重新植入数据。因此,如果数据不存在,我添加了以下函数来插入数据。
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', '', '')
该函数包含在 db/seeds.rb 文件中。这是正确的方法吗?
但是,当我尝试通过 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
令我困惑的是,据我所知,我正在生成正确的 SQL。事实上,我的代码生成了 SQL,然后我将它传递给模型的 find_by_sql 函数,Rails 本身不能更改 SQL,或者是吗?
SELECT * FROM admin_settings WHERE group = 'google' AND name = 'analytics_id';
这些年来,我写了很多 SQL,并且在这里查看了类似的问题。也许我错过了一些东西,但我看不到它。