Давайте внимательно посмотрим на вашу ошибку:
ActionView::Template::Error (PG::Error: ERROR: column "name" does not exist
LINE 1: SELECT "products".* FROM "products" ORDER BY Name
^
Заглавные буквы, но без кавычек Name
очень подозрительно;Идентификаторы SQL нечувствительны к регистру, если вы не заключите их в кавычки (они должны быть нормализованы в верхний регистр, а PostgreSQL нормализован в нижний регистр).Итак, все эти таблицы одинаковы:
create table t (name varchar(255));
create table t (Name varchar(255));
create table t (nAmE varchar(255));
create table t (NAME varchar(255));
, но все они разные:
create table t ("name" varchar(255));
create table t ("Name" varchar(255));
create table t ("nAmE" varchar(255));
create table t ("NAME" varchar(255));
Я бы предположил, что вы создали свою таблицу со столбцом "Name"
, а неname
столбец.Я бы порекомендовал воссоздать вашу таблицу со строчным name
столбцом;в качестве альтернативы, вы могли бы заключить столбец в кавычки, когда позвоните order
:
Model.where(...).order('"Name"')
Но на самом деле, использование имен столбцов в нижнем регистре облегчит вашу жизнь, и у людей, которые поддерживают ваш код, будут приятные воспоминания о вас.
В других местах вы заметили, что вы разрабатываете на SQLite, но развертываете на PostgreSQL.Кажется, что SQLite игнорирует регистр в именах столбцов, даже когда они заключены в кавычки:
sqlite> create table t ("Name" text);
sqlite> insert into t values ('a');
sqlite> select * from t order by name;
Name
a
Так что в SQLite все будет работать нормально.PostgreSQL, однако, обращает внимание на случай использования идентификаторов в кавычках (как указано в спецификации SQL), поэтому ORDER BY Name
потерпит неудачу, если столбец был заключен в кавычки при его создании (то есть что-то вроде create table t ("Name" varchar...
).
Есть и другие различия между SQLite и PostgreSQL.ActiveRecord не может защитить вас от всех различий между базами данных, поэтому вы всегда должны разрабатывать, тестировать и развертывать, используя один и тот же стек (вплоть до версии базы данных).