代码之家  ›  专栏  ›  技术社区  ›  basszero

为什么Rails拒绝使用我的模型(基于SQL视图)?

  •  2
  • basszero  · 技术社区  · 16 年前

    我在MySQL中创建了一个视图,它对应于我正在生成的一些报告(按月份、年份分组的汇总)。该视图有3列(年、月、总计)。视图/表名为“每月报告”。我知道可以通过connection()使用原始SQL。请选择“全部”(…),但我想为此表创建一个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
    

    该文件位于标准Rails结构中:

    app
        controllers
        helpers
        models
            report_monthly.rb
        views
    

    现在,当我使用ror控制台(脚本/控制台)时,我甚至看不到类,更不用说列出所有行了。

    >> MonthlyReport
        NameError: uninitialized constant MonthlyReport
    

    我的所有其他模型都工作正常,但它们遵循“single.rb”->class singluar->table plural的惯例

    更新: 这是否与视图是不可变的这一事实有关?无法插入/更新?

    版本:

    Ruby 1.8.7、Rails 2.3.2、MySQL5.0.75

    4 回复  |  直到 16 年前
        1
  •  7
  •   Jim Puls    16 年前

    文件名和类名必须相同,因此需要调用文件 monthly_report.rb .

        2
  •  0
  •   John Topley    16 年前

    除非我弄错了,否则我认为Rails不允许您基于SQL视图建立ActiveRecord模型。

        3
  •  0
  •   John Topley    16 年前

    也许这只是字体或打字错误,但看起来DB表名中的下划线多于Ruby类中的下划线。-&好吧,是个打字错误!!

    对于john topley:postgresql将视图定义为其选择规则定义为从基础表中提取数据的表。Ruby/Rails不知道视图不是真正的表。所以一般来说,你的信仰是不正确的(但对于MySQL可能是这样)。

    编辑(=2nd try):Rails的类的自动加载机制有问题吗?您的Ruby文件包含类的位置是否正确?(我没有带上我的“铁路之路”副本,但也许有人能在这里帮忙。)

        4
  •  0
  •   Nadav    16 年前

    确保视图中有一个ID列,这当然必须是唯一的。

    为什么你不把这个视图称为“月报”(对应于模型名称),让生活变得简单?

    推荐文章