Почему Rails отказывается использовать мою модель (на основе представления SQL)? - PullRequest
2 голосов
/ 27 мая 2009

Я создал представление в MySQL, которое соответствует некоторым отчетам, которые я генерирую (суммы, сгруппированные по месяцам, годам со сверткой). Представление имеет 3 столбца (год, месяц, всего). Название представления / таблицы "report_monthly". Я знаю, что могу использовать raw sql через connection (). Select_all (...), но я бы хотел создать ActiveRecord для этой таблицы.

Вот моя модель в файле с именем "report_monthly.rb":

class MonthlyReport < ActiveRecord::Base
    # I assume that setting the table name circumvents the pluralized file name convention
    set_table_name "report_monthly"
end

Файл размещен в стандартной структуре рельсов:

app
    controllers
    helpers
    models
        report_monthly.rb
    views

Теперь, когда я использую консоль RoR (скрипты / консоль), я даже не вижу в классе гораздо меньше списка всех строк

>> MonthlyReport
    NameError: uninitialized constant MonthlyReport

Все остальные мои модели работают нормально, но они следуют соглашению "singular.rb" -> class Singluar -> table Plural

UPDATE: Имеет ли это какое-либо отношение к тому факту, что представление является неизменным? не может быть вставлен / обновлен?

Версия:

Ruby 1.8.7, Rails 2.3.2, MySQL 5.0.75

Ответы [ 4 ]

7 голосов
/ 27 мая 2009

Имя файла и имя класса должны совпадать, поэтому ваш файл должен называться monthly_report.rb.

0 голосов
/ 10 января 2010

Убедитесь, что в представлении есть столбец id, который, конечно, должен быть уникальным.

Почему вы не называете представление «month_reports» (для соответствия названию модели) и упрощаете жизнь?

0 голосов
/ 27 мая 2009

Возможно, это просто шрифт или опечатка, но похоже, что вы получили больше, чем подчеркивание в имени вашей таблицы DB, чем в имени, которое вы используете для класса ruby. -> Хорошо, была опечатка !!

Джону Топли: PostgreSQL определяет представления как таблицы, правила выбора которых определены для извлечения данных из базовых таблиц. Ruby / Rails не знал бы, что представление не является реальной таблицей. Таким образом, ваше убеждение в целом неверно (но, возможно, для MySQL).

РЕДАКТИРОВАТЬ (= 2-я попытка): это может быть проблема с механизмом автоматической загрузки классов рельсов? Ваш файл ruby ​​содержит класс в правильном месте? (У меня нет с собой копии «Пути рельсов», но, возможно, кто-то еще может помочь здесь.)

0 голосов
/ 27 мая 2009

Если я не ошибаюсь, я не думаю, что Rails позволяет основывать модель ActiveRecord на представлении SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...