我一直在尝试将我学校的rails上的fedena project从mySQL转换为postgreSQL以进行heroku部署,并遇到以下错误:
显示第40行引发的app / views / class_timings / index.html.erb:
PG::Error: ERROR: syntax error at or near "."
LINE 1: SELECT `batches`.*,CONCAT(courses.code,'-',batches.name) as ...
^
: SELECT `batches`.*,CONCAT(courses.code,'-',batches.name) as course_full_name FROM "batches" INNER JOIN "courses" ON "courses".id = "batches".course_id WHERE ("batches"."is_deleted" = 'f' AND "batches"."is_active" = 't') ORDER BY course_full_name
摘录来源(第40行):
37: <label ><%= t('select_a_batch') %>:</label>
38: <div class="text-input-bg">
39: <%= select :batch, :id,
40: @batches.map {|b| [b.full_name, b.id] },
41: {:prompt => "#{t('common')}"},
42: {:onchange => "#{remote_function(
43: :url => { :action => 'show' },
44: :with => "'batch_id='+value",
45: :before => "Element.show('loader')",
46: :success => "Element.hide('loader')"
47: )}"} %>
显然,我是编程新手!请帮忙。
控制器:
class_timings_controller.rb
def index
@batches = Batch.active
@class_timings = ClassTiming.find(:all,:conditions => { :batch_id => nil,:is_deleted=>false}, :order =>'start_time ASC')
end
答案 0 :(得分:2)
反引号`和CONCAT
函数都是非标准SQL。
如果你真的想引用表名,你需要使用双引号。在Postgresql中有一个名为||
的文本连接运算符。
所以你会有类似的东西:
SELECT "batches".*, (courses.code || '-' || "batches"."name") as course_full_name ...
保持一致 - 如果您在某些地方引用表名,请在任何地方引用它们。
在您至少在基本级别上理解两个数据库的语法之前,这将会很慢。据推测,由于您使用的是rails,因此没有太多的原始SQL。
提示:留出几个小时,浏览两个系统的手册。至少你会知道在哪里查看细节。