【问题标题】:Can't access Mysql model in rails console无法在 Rails 控制台中访问 Mysql 模型
【发布时间】:2013-06-23 04:51:19
【问题描述】:

我有一个现有的远程 mysql 数据库,我正在尝试从我的 rails 应用程序访问它我的 database.yml 中有这个 发展:

 development:
  adapter: mysql2
  encoding: utf8
  database: mydb
  username: myusername
  password: !@#$%@!
  host: IP for my DB
  port: 3306
  pool: 5
  socket: /tmp/mysql.sock  
  timeout: 5000

当我在 Rails 控制台中运行以下命令时

ActiveRecord::Base.connection.tables

它列出了所有可用的表,但是当我尝试访问模型时,它给了我以下错误:

City
NameError: uninitialized constant City from (irb):12
    from /home/shreyas/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start'
    from /home/shreyas/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start'
    from /home/shreyas/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

有什么建议我做错了吗?我想访问我的应用程序中的远程数据库,到目前为止我还没有创建任何模型。我需要创建所有模型吗?我可以在我的 schema.rb 文件中看到完整的数据库结构。

【问题讨论】:

  • 这看起来不像是 mysql 错误,显示你的模型
  • 当我尝试访问我的 DB 表时,这不是 mysql 错误。 Like City 是表名,所以当我尝试访问 city.first 或任何内容时,它会显示上述错误。
  • 我可以看看你的城市模型
  • 它是一个远程数据库。我还没有创建它。
  • 如果你能分享你的城市模型(app/models/city.rb)会更好

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2 rails-console


【解决方案1】:

为此,您可以在控制台中编写类似的代码

rails g model City

它将为您创建城市模型。正如你所说,你有现有的表,所以你不需要上述语法生成的迁移。所以你应该从 db/migrate 中删除生成的迁移。

或者,您可以做一件事,只需在 app/models 中添加 city.rb 文件。然后添加代码

class City < ActiveRecord::Base
   # if your table name is cities, then you don't need to do any thing.
   # if your table name is something else rather than cities then place the following commented code
   # self.table_name = 'your_existing_city_table_name'

   # then you have to add columns of the table as attr_accessible. for e.g. you have name, state_id in there
   attr_accessible :name, :state_id
end

希望它对你有用:)

【讨论】:

  • @BachanSmuthy 我确实按照步骤操作,我的数据库中表的名称是城市(小写),但是当我尝试访问城市时,它说城市(表不存在),如果我使用城市它给了我同样的错误。 :(
  • 你在 City 模型中添加了 self.table_name = 'city' 吗?
  • 如果你不介意,你可以投票赞成这个问题;)如果你能帮忙,我还有一个问题stackoverflow.com/questions/17185439/huge-json-object-to-excel
  • 我多么愚蠢,我怎么能忘记这一点。谢谢朋友,谢谢你的帮助。
【解决方案2】:

如果有人遇到这种情况,请务必仔细检查您的模型。我手动创建了它们,忘记让 Active Record 知道我的模型。

我有:

class Currency
  ...
end

你需要改变它来显示

class Currency < ApplicationRecord
  ...
end

可能会为您节省数小时的调试时间:)

【讨论】:

    【解决方案3】:

    您当然可以在 mysql 数据库中访问您的数据,但为了将其用作对象表示,您需要创建一个与您的数据关联的 model

    class City < ActiveRecord::Base
    end
    

    这样ActiveRecord 将为您完成艰苦的工作,以便将您的对象“链接”到数据库中的数据(假设模型名称正确,这里应该有一个名为cities 的表)。

    然后您将能够从 rails 控制台获取城市

    City.all
    

    更多关于ActiveRecord的信息,请参考http://guides.rubyonrails.org/active_record_querying.html

    【讨论】:

    • 那么如何在我的应用程序中添加现有模型。我没有迁移,但我可以在我的 schema.rb 文件中看到所有表结构。并且错误地我已经通过运行 rake db:schema:load 清除了数据库
    • 不明白。如果您的数据库已经填满了数据,只需像我上面显示的那样添加 ruby​​ 类(创建文件并粘贴代码),以便能够通过 ruby​​ 和活动记录访问您的数据。但是,在某些时候,没有迁移可能对您来说是个问题。例如,在生产服务器上推送代码时...
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 2022-08-15
    • 2019-07-29
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多