使用db / Listings.sqlite3(预填充数据库)替换db / development.sqlite3获取错误:未定义方法

时间:2012-03-09 19:00:18

标签: ruby-on-rails ruby

嗨,我是一个初学者,我正在做什么似乎对我来说是一个常见的用例,它很有趣,在Rails中似乎很难做,而且互联网上关于这个主题的帖子不多:

  1. 我创建了一个新的rails应用程序。由于我有一个遗留数据库,我想在我的新rails应用程序中包含,我将“development.sqlite3”替换为遗留数据库“Listings.sqlite3”

  2. 然后我生成了一个模型“business.rb”来匹配我遗留数据库中的“业务”表。这是代码:

    class Business < ActiveRecord::Base
    
      establish_connection "Listings_development"
    
    end
    
  3. 然后我修改了“config / database.yml”文件以包含以下内容:

    Listings_development:
      adapter: sqlite3
      database: db/Listings.sqlite3
      pool: 5
      timeout: 5000
    
    Listings_test:
      adapter: sqlite3
      database: db/Listings.sqlite3
      pool: 5
      timeout: 5000
    
    Listings_production:
      adapter: sqlite3
      database: db/Listings.sqlite3
      pool: 5
      timeout: 5000
    
  4. 之后我生成了名为“businesses_controller.rb”的控制器,其中包含以下代码:

    class BusinessesController < ApplicationController
      def show
    
      end
    
      def index
        @businesses = Business.all
        respond_to do |format|
          format.html #index.html.erb
        end
      end
    end
    
  5. 最后我将“config / routes.rb”文件更改为以下内容:

    Directory::Application.routes.draw do
      resources :businesses
    
    
      get "business/index"
    
      match ':controller(/:action(/:id))(.:format)'
    
  6. 最后我添加了一个视图文件“index.html.erb:

    <h1>Listing businesses</h1>
    <table>
      <tr>
        <th>Name:</th>
        <th>Phone Number:</th>
        <th>Address:</th>
      </tr>
    
    <% @businesses.each do |business| %>
      <tr>
        <td><%= business.company_name %></td>
        <td><%= business.phone_number %></td>
        <td><%= business.address %></td>
    
  7. 我以为我已经完成了,我已经成功地将我的旧数据库及其数据整合到我的新rails应用程序中。但是当我在浏览器窗口中输入“http://localhost:3000/businesses/”时。我在屏幕上出现此错误:

    Showing /Users/AM/Documents/RailsWS/cmdLineWS/Directory/app/views/businesses/index.html.erb
    where line #14 raised:
    
    undefined method `company_name' for #<Business:0x00000104e1d0e8>
    Extracted source (around line #14):
    
    11: 
    12: <% @businesses.each do |business| %>
    13:   <tr>
    14:     <td><%= business.company_name %></td>
    15:     <td><%= business.phone_number %></td>
    16:     <td><%= business.address %></td>
    17:     <td><%= link_to 'Show', business %></td>
    Rails.root: /Users/AM/Documents/RailsWS/cmdLineWS/Directory
    

    怎么了Rails?包含遗留数据库真的很复杂吗?我认为轨道的重点是快速原型制作。

    以下是我的Listings.db文件的快照 enter image description here

1 个答案:

答案 0 :(得分:0)

问题可能是由于企业列包含空格和大写字符(例如,我在屏幕截图中看到“公司名称”而不是想要的“company_name”)。我不知道rails是否支持这种属性名称。

BTW不是一个好的做法,在列名中有空格和其他奇怪的字符(以我的拙见)