Reputation: 385
I have spent 4 days trying to install Ruby on Rails properly but I have a big problem. The first time I used Linux (it's more confortable for me) but, after having a problem, I used windows. To my surprise, I have the same issue on Windows, so I suppose that I have forbidden something. If I try to load a page with a small form for a model, it shows me an error that says:
Unable to autoload constant ReservationsController, expected ...../app/controllers/reservations_controller.rb to define it
Also, if I try to execute a test for a model with rspec, I receive a lot of errors of the following type:
$ rspec spec/models/reservation_spec.rb
FFFFF
Failures:
1) Reservation Fields
Failure/Error: it{ should have_fields( :from_date ).of_type( Date ) }
NoMethodError:
undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x915ebc8>
# ./spec/models/reservation_spec.rb:7:in `block (3 levels) in <top (required)>'
2) Reservation Fields
Failure/Error: it{ should have_fields( :price ).of_type( Float ) }
NoMethodError:
undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x9423cc8>
# ./spec/models/reservation_spec.rb:10:in `block (3 levels) in <top (required)>'
3) Reservation Fields
Failure/Error: it{ should have_fields( :room ).of_type( String ) }
NoMethodError:
undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x94d5bbc>
# ./spec/models/reservation_spec.rb:11:in `block (3 levels) in <top (required)>'
4) Reservation Fields
Failure/Error: it{ should have_fields( :until_date ).of_type( Date ) }
NoMethodError:
undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x952cb60>
# ./spec/models/reservation_spec.rb:8:in `block (3 levels) in <top (required)>'
5) Reservation Fields
Failure/Error: it{ should have_fields( :number_of_persons ).of_type( Integer ) }
NoMethodError:
undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x957bbc0>
# ./spec/models/reservation_spec.rb:9:in `block (3 levels) in <top (required)>'
Finished in 0.16437 seconds
5 examples, 5 failures
Failed examples:
rspec ./spec/models/reservation_spec.rb:7 # Reservation Fields
rspec ./spec/models/reservation_spec.rb:10 # Reservation Fields
rspec ./spec/models/reservation_spec.rb:11 # Reservation Fields
rspec ./spec/models/reservation_spec.rb:8 # Reservation Fields
rspec ./spec/models/reservation_spec.rb:9 # Reservation Fields
Randomized with seed 18738
The steps that I have followed to install rails are the following:
The main files that I have used are the following:
Gemfile
source 'https://rubygems.org'
require 'mongo'
source 'http://gemcutter.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0'
gem 'mongo_mapper'
gem "rspec-rails", :group => [:development, :test]
group :test do
gem 'database_cleaner'
end
gem 'json', '~> 1.8.0' # Gem to support json
gem 'haml', '~> 4.0.3' # Gem to support haml views
gem 'mongo', '~> 1.9.1' # Gem to use mongodb
gem 'mongoid', git: 'https://github.com/mongoid/mongoid.git'
gem 'rake', '~> 10.1.0' # Gem to use rake (rspec and cucumber)
gem 'cucumber', '~> 1.3.5' # Gem to test with cucumber
gem 'capybara', '~> 2.1.0' # Gem to use capybara in cucumber tests
gem 'wait_for', '~> 0.1.1' # Gem to wait for an apparition in cucumber tests
gem 'factory_girl', '~> 4.2.0' # Gem to create examples data
group :assets do
gem 'sass-rails', '~> 4.0.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'uglifier', '~> 2.1.2'
end
mongoid.yml
development:
sessions:
default:
database: hotel_development
hosts:
- localhost:27017
options:
options:
test:
sessions:
default:
database: hotel_test
hosts:
- localhost:27017
options:
consistency: :strong
max_retries: 1
retry_interval: 0
mongo.rb
MongoMapper.connection = Mongo::Connection.new('localhost', 27017)
MongoMapper.database = "#myapp-#{Rails.env}"
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
MongoMapper.connection.connect if forked
end
end
reservation.rb
class Reservation
include Mongoid::Document
field :from_date, type: Date
field :until_date, type: Date
field :number_of_persons, type: Integer
field :price, type: Float
field :room, type: String
has_one :client
end
reservations_controller.rb
class ReservationsControlller < ApplicationController
def show
@user = User.find( params[:id] )
end
def new
@user = User.new
end
def create
@user = User.new( params[:user] )
if @user.save
redirect_to @user
else
render 'new'
end
end
end
routes.rb
Hotel::Application.routes.draw do
resources :reservations, only: [:show, :new, :create]
end
reservation_spec.rb
require 'spec_helper'
describe Reservation do
subject{ @reservation }
describe "Fields" do
it{ should have_field( :from_date ).of_type( Date ) }
it{ should have_field( :until_date ).of_type( Date ) }
it{ should have_field( :number_of_persons ).of_type( Integer ) }
it{ should have_field( :price ).of_type( Float ) }
it{ should have_field( :room ).of_type( String ) }
end
end
If you need another file I can put without problems.
Thanks in advance.
EDIT: Added rspec tests for reservation model. EDIT2: I have included the output of the rspec test.
Upvotes: 1
Views: 3196
Reputation: 29449
You have three l
s in your ReservationsControlller
class name, which is why Rails is not finding the expected controller class when it loads the controller file. As for the rspec problem, perhaps you're missing an enclosing describe
, but please share your spec so that we can see what's going on.
Update: Looking at your spec, you've set your subject
to @reservation
, but haven't initialized @reservation
, so it's value will be nil
. Also, since you used the class Reservation
as the argument to the outer describe
, the subject would implicitly be Reservation.new
without the subject
call.
As for the errors you're now getting, I'm not sure. of_type
seems to be defined in mongoid-rspec
, which you haven't explicitly included, but you're not getting an error from have_fields
, which I thought was defined there as well. I don't see have_fields
defined in the mongoid-rspec
source, however, so perhaps that's coming from somewhere else. Anyway, I'd try adding the gem to see if that takes care of the problem.
Upvotes: 6