1

我一直在尝试将我学校的基于 ruby​​ on rails 的fedena 项目从 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
4

1 回答 1

2

反引号 ` 和CONCAT函数都是非标准 SQL。

如果您真的想引用表名,则需要使用双引号。在 Postgresql 中有一个名为||.

所以你会有类似的东西:

SELECT "batches".*, (courses.code || '-' || "batches"."name") as course_full_name ...

保持一致 - 如果您在某些地方引用表名,请在任何地方引用它们。

在您至少基本了解两个数据库的语法之前,这将是缓慢的。由于您使用的是rails,因此大概没有太多原始SQL。

提示:留出几个小时并浏览两个系统的手册。至少你会知道在哪里查看详细信息。

于 2013-06-14T07:09:40.820 回答