【问题标题】:Error while rake db:seed, prefilling database. uninitialized constant Clients_coursesrake db:seed 时出错,预填充数据库。未初始化的常量 Clients_courses
【发布时间】:2015-03-25 11:32:21
【问题描述】:

我想用 db/seeds.rb 预填充我的数据库,但在执行过程中出错。

架构已完美加载和设置。但是当我用 rake db:seed 预填充数据库时,我得到了这个错误:

uninitialized constant Clients_courses

我的数据库架构中有表 clients_courses。所以我试着像这样预填充它:

Clients_courses.create(:client_id => 6, :course_id => 2)

这有什么问题?

我也尝试过使用其他一些表,例如用户表。但是同样的问题。

【问题讨论】:

    标签: ruby-on-rails ruby database


    【解决方案1】:

    你应该有相应的模型来操作这样的数据。对于users 表,您通常有User 模型。在您的情况下,您要么有 ClientsCoursesClientsCourse 模型,或者假设您有 :has_and_belongs_to_many 关联,则没有这样的模型。

    在这种情况下,做你想做的唯一方法是使用现有的(ClientCourse):

     Client.find(6).courses << Course.find(2)
    

    【讨论】:

    • 附加问题。如果我这样做Client.create( :id =&gt; id 是数据库中的自动增量列。但是我添加到数据库的值需要有一个特殊的 id,例如它不能以 1 开头。在这种情况下,我需要设置一个客户端 ID 2 客户端 ID 10 ...这可能吗? ...如果我这样做 Client.create( :id =&gt; 10 它会自动将其设置为一个
    • 也不起作用是这样的::active =&gt; 1colum 是数据库上的 tinyint,每次我运行 rake db:seed 时,值都设置为 0
    • @Felix 使用主键操作是个坏主意。更好的方法是创建新字段并将其用于您的特殊目的。抱歉,我没看懂你的最后一个问题。除非您显示两个模型的数据库方案和代码,否则我什么都说不出来。
    • 在用户表中,我有一个名为 active 的列,数据类型为 tinyint。所以现在我想用seeds.rb int 值User.create([ { :id =&gt; 1, :firstname =&gt; 'Felix', :lastname =&gt; 'Hohlwegler', :active =&gt; 1}]) 存储,但它不存储1。它总是在数据库中存储0。
    • @Felix 这与最初的问题无关,但试试这个:User.create({ :id =&gt; 1, :firstname =&gt; 'Felix', :lastname =&gt; 'Hohlwegler', :active =&gt; true })
    【解决方案2】:
    • 创建模型 ClientsCourse
      即在 app/model/clients_course.rb 中
    • 在文件里面添加下面一行并保存

      class ClientsCourse   < ActiveRecord::Base
      
      end
      
    • 更正如下行

       ClientsCourse.create(:client_id => 6, :course_id => 2)
      

    希望有帮助

    【讨论】:

      【解决方案3】:

      你的模型名称应该client_course.rb和一个名为client_courses的表

      【讨论】:

        猜你喜欢
        • 2020-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多