Hi,
Have searched and searched the group and the net with no joy on
this…
I have set up users table and am trying to insert newly registered
users with the following code from:
class UserController < ApplicationController
def index
end
def register
@title = “Register”
if request.post?
#raise params[:user].inspect
@user = User.new(params[:user])
if @user.save
render :text => “User created!”
end
end
end
end
I receive the following error:
ActiveRecord::StatementInvalid in UserController#register
Could not find table ‘users’
RAILS_ROOT: /Users/Will/Development/rails_space
Application Trace | Framework Trace | Full Trace
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/
connection_adapters/sqlite3_adapter.rb:29:in table_structure' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/ core_ext/object/misc.rb:39:in
returning’
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/
connection_adapters/sqlite3_adapter.rb:28:in table_structure' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/ connection_adapters/sqlite_adapter.rb:213:in
columns’
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/
base.rb:1276:in columns' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/ base.rb:3008:in
attributes_from_column_definition_without_lock’
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/
locking/optimistic.rb:66:in attributes_from_column_definition' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/ base.rb:2435:in
initialize’
/Users/Will/Development/rails_space/app/controllers/user_controller.rb:
10:in new' /Users/Will/Development/rails_space/app/controllers/user_controller.rb: 10:in
register’
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/
base.rb:1322:in send' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/ base.rb:1322:in
perform_action_without_filters’
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/
filters.rb:617:in call_filters' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/ filters.rb:610:in
perform_action_without_benchmark’
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/
benchmarking.rb:68:in perform_action_without_rescue' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/ core_ext/benchmark.rb:17:in
ms’
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/
core_ext/benchmark.rb:10:in realtime' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/ core_ext/benchmark.rb:17:in
ms’
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/
benchmarking.rb:68:in perform_action_without_rescue' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/ rescue.rb:160:in
perform_action_without_flash’
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/
flash.rb:141:in perform_action' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/ base.rb:523:in
send’
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/
base.rb:523:in process_without_filters' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/ filters.rb:606:in
process’
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/
base.rb:391:in process' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/ base.rb:386:in
call’
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/
routing/route_set.rb:433:in `call’
It looks as if Rails is trying to find that table using the sqlite3
adapter, bt my db is configured to use mysql. Here is database.yml:
MySQL. Versions 4.1 and 5.0 are recommended.
Install the MySQL driver:
gem install mysql
On Mac OS X:
sudo gem install mysql – --with-mysql-dir=/usr/local/mysql
On Mac OS X Leopard:
sudo env ARCHFLAGS=“-arch i386” gem install mysql – --with-mysql-
config=/usr/local/mysql/bin/mysql_config
This sets the ARCHFLAGS environment variable to your native
architecture
On Windows:
gem install mysql
Choose the win32 build.
Install MySQL and put its /bin directory on your path.
And be sure to use new-style password hashing:
http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
adapter: mysql
encoding: utf8
reconnect: false
database: rails_space_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
Warning: The database defined as “test” will be erased and
re-generated from your development database when you run “rake”.
Do not set this db to the same as development or production.
test:
adapter: mysql
encoding: utf8
reconnect: false
database: rails_space_test
pool: 5
username: root
password:
socket: /tmp/mysql.sock
production:
adapter: mysql
encoding: utf8
reconnect: false
database: rails_space_production
pool: 5
username: root
password:
socket: /tmp/mysql.sock
I have verified existence of the table and using the Ruby console can
add records no problem.
Here is the user.rb model file:
class User < ActiveRecord::Base
Max & min lengths for all fields
SCREEN_NAME_MIN_LENGTH = 4
SCREEN_NAME_MAX_LENGTH = 20
PASSWORD_MIN_LENGTH = 4
PASSWORD_MAX_LENGTH = 40
EMAIL_MAX_LENGTH = 50
SCREEN_NAME_RANGE = SCREEN_NAME_MIN_LENGTH…SCREEN_NAME_MAX_LENGTH
PASSWORD_RANGE = PASSWORD_MIN_LENGTH…PASSWORD_MAX_LENGTH
Text box sizes for display in the views
SCREEN_NAME_SIZE = 20
PASSWORD_SIZE = 10
EMAIL_SIZE = 30
validates_uniqueness_of :screen_name, :email
validates_length_of :screen_name, :within => SCREEN_NAME_RANGE
validates_length_of :password, :within => PASSWORD_RANGE
validates_length_of :email, :maximum => EMAIL_MAX_LENGTH
validates_format_of :screen_name,
:with => /^[A-Z0-9_]*$/i,
:message => "must contain only letters, " +
“numbers, and underscores”
validates_format_of :email,
:with => /^[A-Z0-9._%-]+@([A-Z0-9-]+.)+[A-Z]
{2,4}$/i,
:message => “must be a valid email address”
end
Here is my environment.rb file:
Be sure to restart your server when you modify this file
Specifies gem version of Rails to use when vendor/rails is not
present
RAILS_GEM_VERSION = ‘2.3.2’ unless defined? RAILS_GEM_VERSION
Bootstrap the Rails environment, frameworks, and default
configuration
require File.join(File.dirname(FILE), ‘boot’)
Rails::Initializer.run do |config|
Settings in config/environments/* take precedence over those
specified here.
Application configuration should go into files in config/
initializers
– all .rb files in that directory are automatically loaded.
Add additional load paths for your own custom dirs
config.load_paths += %W( #{RAILS_ROOT}/extras )
Specify gems that this application depends on and have them
installed with rake gems:install
config.gem “bj”
config.gem “hpricot”, :version => ‘0.6’, :source => "http://
config.gem “sqlite3-ruby”, :lib => “sqlite3”
config.gem “aws-s3”, :lib => “aws/s3”
Only load the plugins named here, in the order given (default is
alphabetical).
:all can be used as a placeholder for all plugins not explicitly
named
config.plugins =
[ :exception_notification, :ssl_requirement, :all ]
Skip frameworks you’re not going to use. To use Rails without a
database,
you must remove the Active Record framework.
config.frameworks -=
[ :active_record, :active_resource, :action_mailer ]
Activate observers that should always be running
config.active_record.observers
= :cacher, :garbage_collector, :forum_observer
Set Time.zone default to the specified zone and make Active Record
auto-convert to this zone.
Run “rake -D time” for a list of tasks for finding time zone
names.
config.time_zone = ‘UTC’
The default locale is :en and all translations from config/locales/
*.rb,yml are auto loaded.
config.i18n.load_path += Dir[Rails.root.join(‘my’, ‘locales’, '*.
{rb,yml}')]
config.i18n.default_locale = :de
end
I made sure to configure the app with the -d mysql option when
creating it.
Any help hugely appreciated.
thanks