2013-03-07 5 views
0

Я перемещаю устаревшее приложение из MS-SQL в Postgres, которое использует Rails для доступа к данным.ActiveRecord/ActiveModel Attribute Case-Sensitivity

столбцов в MS-SQL, капитализируются, и при использовании ActiveRecord-SQL-Server-адаптера, они читаются так:

var something = my_model.SomeAttribute

Даже если она постоянна, она не появляется так как приложение только считывает данные из базы данных MSSQL.

Проблема, с которой я столкнулся сейчас, - это переместить в postgres, она преобразует все имена столбцов и т. Д. В нижний регистр (поскольку SQL не предназначен для учета регистра). Теперь, когда я пытаюсь получить доступ к SomeAttribute на моей модели, он вызывает ActiveModel::MissingAttributeError, так как теперь он является строчным.

Некоторые примеры симптома:

p.SomeAttribute 
=> ActiveModel::MissingAttributeError: missing attribute: SomeAttribute 

p.read_attribute(:SomeAttribute) 
=> nil 

p.has_attribute?(:SomeAttribute) 
=> false 

p.read_attribute(:someattribute) 
=> 'expected value' 

Есть ли какой-то способ, которым я могу получить ActiveRecord/ActiveModel для преобразования имен атрибутов в нижний регистр, прежде чем пытаться получить их?

+0

Вы когда-нибудь это выясняли? – Altonymous

ответ

0

Отказ от ответственности: это был очень Временное решение - определенно не «правильная» вещь!

Создано просмотров, как это:

CREATE VIEW mymodel AS 
    SELECT 
     at.someattribute 
     , at.someattribute AS "SomeAttribute" 
    FROM actual_table at 

Используя двойные кавычки в SQL сохраняет регистр.

0

В настоящее время я работаю над двумя различными проектами, используя Rails для подключения к старой базе данных MS SQL Server ... с именами таблиц и столбцов, которые не соответствуют ожидаемым Rails.

В моем последнем проекте, я думаю, что я только что нашел золотое яйцо :-) И это вовсе не изменить что-либо на стороне Rails, чтобы заставить все работать - золотое яйцо должно использовать SQL Views для " преобразовать "устаревшие таблицы во что-то, что понимает Rails - сейчас у меня есть проект в dev прямо сейчас, когда я работаю над тем, где это работает фантастически, и мне не нужно пытаться именовать имена таблиц или столбцов в Rails так как все выглядит персиковым к моменту, когда оно достигнет моего приложения Rails. Я публикую это сейчас, потому что у меня было много проблем для моего первого проекта, и я думаю, что это может значительно облегчить жизнь многим другим, и я не нашел это решение отправленным где-нибудь еще.

Так, например, скажем, у вас есть унаследованная таблица в Microsoft SQL Server 2008R2 под названием «Контакт-Table» и имеют странные имена столбцов, как, например:

Contact-Table: 
    ID_Primary 
    First Name 
    Last Name 

Использование представлений MS SQL таблицы можно «воссоздайте» эту же таблицу. Создайте представление, основанное на Legacy-Table; назовите представление, которое вы хотите, чтобы «таблица» вызывается в Rails, и используйте псевдонимы столбцов для переименования столбцов. Таким образом, здесь мы могли бы создать представление под названием «контакты» (в соответствие с Rails конвенций) со следующими столбцами:

contacts: 
    id    (alias for ID_Primary) 
    first_name  (alias for First Name) 
    last_name  (alias for Last Name) 

Тогда в модели Rails все, что вам нужно сделать ссылку на ваш стол «Контакты» в MS SQL и имена столбцов доступны, как ожидалось. До сих пор я это делал, и он работает с крошечным камнем и фри-тд. Я могу запрашивать, создавать и обновлять записи и ассоциации Rails (has_many/принадлежит_to и т. Д.).Я очень рад использованию табличных представлений MS SQL вместо других методов, которые я использовал ранее, чтобы заставить Rails разговаривать с устаревшими базами данных! Мне бы хотелось услышать, что думают другие.