Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9220303
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 18, 20262026-06-18T03:18:57+00:00 2026-06-18T03:18:57+00:00

I am stuck with a problem and can’t figure out where the problem is.

  • 0

I am stuck with a problem and can’t figure out where the problem is. Because I am relatively new you can hopefully help me :).

First of all I am using padrino with the datamapper gem.

I have a Trip and Accommodation model with a one_to_many relationship

What the models look like:
Trip.rb

class Trip
  include DataMapper::Resource

  # Associations
  has n, :accommodations

  property :id, Serial, :key => true
  # many more properties
end

Accommodation.rb

class Accommodation
  include DataMapper::Resource

  has n, :appartments
  belongs_to :trip, :child_key => [:trip_id]

  # property <name>, <type>
  property :id, Serial
end

Based on the dm documentation I assume the association is valid

I want to achieve the following application behaviour:

A User can select a specific trip and add or remove accommodations

This is how my controllers look lke:
trips.rb

HhtBackoffice.controllers :trips do
  get :index do
    @trips = Trip.all
    render 'trips/index'
  end

  get :show, :with => :id do
    @trip = Trip.get(params[:id])
    set_current_trip(Trip.get(params[:id]))
    render 'trips/show'
  end

  get :new do
    @trip = Trip.new
    render 'trips/new'
  end

  post :create do
    @trip = Trip.new(params[:trip])
    if @trip.save
      flash[:notice] = 'Neue Reise wurde erfolgreich hinzugef&uuml;gt'
      redirect url(:trips, :edit, :id => @trip.id)
    else 
      render 'trips/new'
    end
  end
..........
more code
........
end

accommodations.rb

HhtBackoffice.controllers :accommodations do
  get :index do
    @accommodations = Accommodation.all
    render 'accommodations/index'
  end

  get :new do
    @trip = current_trip
    @accommodation = @trip.accommodations.new  # <-- This function is not known according to the error
    render 'accommodations/new'
  end

  post :create do
    @trip = current_trip
    @accommodation = @trip.accommodations.new(params[:accommodation])
    if @accommodation.save
      flash[:notice] = 'Neue Reise wurde erfolgreich hinzugef&uuml;gt'
      redirect url(:accommodations, :edit, :id => @accommodation.id)
    else 
      render 'accommodations/new'
    end
  end
.... more code here ....
end

As you can see I use two helper functions. set_current_trip (when the show view is called) to keep track of the current Trip. And current_trip to get the current_trip.

This is my trips/show.haml view

.block
    .secondary-navigation
        %ul.wat-cf
            %li.first.active=link_to pat(:list), url(:trips, :index)
            %li=link_to pat(:new), url(:trips, :new)
    .content
        %h2.title
            
        .inner
            -@trip.accommodations.each do |acco|
                %ud
                    %li= acco.id
                    %li= acco.name
            =button_to pat(:new), url(:accommodations, :new), :method => :get, :class => :button_to

        .actions-bar.wat-cf
            .actions="&nbsp;"

This is the accommodations/new view

.block
  .secondary-navigation
    %ul.wat-cf
      %li.first=link_to pat(:list), url(:accommodations, :index)
      %li.active=link_to pat(:new), url(:accommodations, :new)
  .content
    %h2.title
      =pat(:new)
      =mt(:accommodation)
    .inner
      -form_for :accommodation, url(:accommodations, :create), :class => :form do |f|
        =partial "accommodations/form", :locals => { :f => f }

And this is the ERROR

#<NoMethodError: undefined method `accommodations' for nil:NilClass>

/home/paddy/Projects/hht_backoffice/app/controllers/accommodations.rb in block (2 levels) in <top (required)>
    @trip.accommodations.new
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in call
            proc { |a,p| unbound_method.bind(a).call }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in block in route
            proc { |a,p| unbound_method.bind(a).call }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in []
        halt_response     = catch(:halt) { route_eval { @route.dest[self, @block_params] } }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in block (3 levels) in process_destination_path
        halt_response     = catch(:halt) { route_eval { @route.dest[self, @block_params] } }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in route_eval
      throw :halt, yield
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in block (2 levels) in process_destination_path
        halt_response     = catch(:halt) { route_eval { @route.dest[self, @block_params] } }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in catch
        halt_response     = catch(:halt) { route_eval { @route.dest[self, @block_params] } }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in block in process_destination_path
        halt_response     = catch(:halt) { route_eval { @route.dest[self, @block_params] } }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in instance_eval
    Thread.current['padrino.instance'].instance_eval do
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in process_destination_path
    Thread.current['padrino.instance'].instance_eval do
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/http_router-0.10.2/lib/http_router/node/root.rb in []
      end
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/http_router-0.10.2/lib/http_router.rb in block in call
    response = catch(:success) { @root[request] }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/http_router-0.10.2/lib/http_router.rb in catch
    response = catch(:success) { @root[request] }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/http_router-0.10.2/lib/http_router.rb in call
    response = catch(:success) { @root[request] }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in route!
          if base.compiled_router and match = base.compiled_router.call(@request.env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/application/routing.rb in dispatch!
          route!
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in block in call!
      invoke { dispatch! }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in block in invoke
      res = catch(:halt) { yield }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in catch
      res = catch(:halt) { yield }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in invoke
      res = catch(:halt) { yield }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in call!
      invoke { dispatch! }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in call
      dup.call!(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sass-3.2.5/lib/sass/plugin/rack.rb in call
        @app.call(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.5.1/lib/rack/head.rb in call
    status, headers, body = @app.call(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.5.1/lib/rack/methodoverride.rb in call
      @app.call(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/reloader.rb in call
        @app.call(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/logger.rb in call
        status, header, body = @app.call(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/showexceptions.rb in call
      @app.call(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.5.1/lib/rack/session/abstract/id.rb in context
          status, headers, body = app.call(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.5.1/lib/rack/session/abstract/id.rb in call
          context(env)
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in block in call
        synchronize { prototype.call(env) }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in synchronize
          yield
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/sinatra-1.3.4/lib/sinatra/base.rb in call
        synchronize { prototype.call(env) }
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/router.rb in block in call
        return app.call(
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/router.rb in each
      @mapping.each do |host, path, match, app|
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/padrino-core-0.10.7/lib/padrino-core/router.rb in call
      @mapping.each do |host, path, match, app|
/home/paddy/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.5.1/lib/rack/handler/webrick.rb in service
        status, headers, body = @app.call(env)
/home/paddy/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/webrick/httpserver.rb in service
      si.service(req, res)
/home/paddy/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/webrick/httpserver.rb in run
          server.service(req, res)
/home/paddy/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/webrick/server.rb in block in start_thread

I have no problems by doing "the same" via the padrino console:

irb(main):001:0> @trip = Trip.get(1)
  DEBUG - (0.000101) SET sql_auto_is_null = 0
  DEBUG - (0.000127) SET SESSION sql_mode = 'ANSI,NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION,NO_UNSIGNED_SUBTRACTION,TRADITIONAL'
  DEBUG - (0.000092) SELECT `id`, `name`, `type`, `starts_at`, `ends_at`, `no_of_free_places`, `no_of_guests`, `raceday`, `created_at`, `updated_at` FROM `trips` WHERE `id` = 1 LIMIT 1
=> #<Trip @id=1 @name="Rofl" @type="Wettkampfreise" @starts_at=nil @ends_at=nil @no_of_free_places=nil @no_of_guests=nil @raceday=nil @created_at=#<DateTime: 2013-01-31T15:00:16+01:00 ((2456324j,50416s,0n),+3600s,2299161j)> @updated_at=#<DateTime: 2013-01-31T15:16:40+01:00 ((2456324j,51400s,0n),+3600s,2299161j)>>

irb(main):02:0> @trip.accommodations.new
=> #<Accommodation @id=nil @name=nil @no_of_appartments=nil @location=nil @capacity=nil @trip_id=1>

Any hints on solving this problem?

Ok, I have a guess. My current_trip object is nil.
These are my helper methods:

helper/trips.rb

  def set_current_trip(trip=nil)
    @current_trip = trip
  end

  def current_trip 
    @current_trip 
  end

Thanks in Advance!

Edit 2

Here are my routes. Maybe nesting is a good way to get it working
I want to call

=button_to pat(:new), url(:accommodations, :new), :method => :get, :class => :button_to

in my trips/show.haml

But I get the error

route mapping for url(:accommodations_new) could not be found!

Why is that? According to my routes I should get to /trips/:trip_id/accommodations/new

ROUTES

URL                           REQUEST  PATH
    (:accommodations, :index)        GET    /trips/:trip_id/accommodations
    (:accommodations, :new)          GET    /trips/:trip_id/accommodations/new
    (:accommodations, :create)      POST    /trips/:trip_id/accommodations/create
    (:accommodations, :edit)         GET    /trips/:trip_id/accommodations/edit/:id
    (:accommodations, :update)       PUT    /trips/:trip_id/accommodations/update/:id
    (:accommodations, :destroy)    DELETE   /trips/:trip_id/accommodations/destroy/:id
    (:base, :index)                 GET    /
    (:trips, :index)                GET    /trips
    (:trips, :show)                 GET    /trips/show/:id
    (:trips, :new)                  GET    /trips/new
    (:trips, :create)              POST    /trips/create
    (:trips, :edit)                 GET    /trips/edit/:id
    (:trips, :update)               PUT    /trips/update/:id
    (:trips, :destroy)            DELETE   /trips/destroy/:id
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-18T03:18:58+00:00Added an answer on June 18, 2026 at 3:18 am

    current_trip is returning nil.
    First off, make sure that @trip is not nil when you call one of its methods, because what if no trip has been set yet?

      get :new do
        @trip = current_trip
        if @trip
          @accommodation = @trip.accommodations.new  
          render 'accommodations/new'
        else
          # trip is nil. Call an error or something.
        end
      end
    

    Second, I’m not sure your helper method will ever return a trip, because @current_trip has not been initialized. What is current_trip for? Is it something you want to persist for a user across sessions? If so, you may want to save the current_trip in a cookie.

    def set_current_trip(trip_id = 0)
    
      response.set_cookie 'current_trip', :value => trip_id, :path => '/', :expires => Time.now + 60 * 60 * 24 * 365 * 20
    
    end
    
    def current_trip 
      trip_id = request.cookies["current_trip"]
      current_trip = Trip.get trip_id
    end
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm stuck and can't figure out a fix to my current problem and was
I'm just stuck with a problem (maybe Simple). But I can't figure out how
I'm stuck here with a problem that I can't figure out. I want to
I'm currently stuck with this problem and I hope somebody can help me out.
I'm stuck with a problem and hope stackoverfolw community can help me. I want
Hi i got stuck with this problem, i can't find out how to get
I'm hoping someone can help me as I've been stuck on this problem for
i've been stuck on a problem and can't seem to find any help for
I got a problem stuck me few days, tried several ways still can't figure
I'm working on my first rails deployment and having a problem I can't figure

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.