Can't handle <% if logged_in? %> when running for the first time

My app can't handle <% if logged_in? %> when running for the first
time. It has no registered users, but why does it have to complain? It
handles everything just fine after I register the first user manually
through www.mysite.com/users/new.

Processing MainController#index (for 127.0.0.1 at 2008-04-14 01:30:13)
[GET]
  Session ID:
BAh7CjoMY3NyZl9pZCIlYTNiMmY5ZDFmMjJhOWJhZDhhMTI1YzQxYzkzNDI5%0ANzg6CnRpdGxlewA6CXVzZXJpBjoOcmV0dXJuX3RvMCIKZmxhc2hJQzonQWN0%0AaW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA
%3D%3D--346cfed42d9b4cc6e1dfc4f4d95ae774e5e9dc48
  Parameters: {"action"=>"index", "controller"=>"main"}
  ParentCategory Load (0.002000) SELECT * FROM `parent_categories`
ORDER BY name ASC
  Category Load (0.006000) SELECT * FROM `categories` ORDER BY name
ASC
Rendering template within layouts/application
Rendering main/index
Rendered layouts/_header_1 (0.00200)
  Site Load (0.002000) SELECT * FROM `sites` WHERE (host = '127.0.0.1'
or host = '')

ActionView::TemplateError (Site::UndefinedError) on line #3 of layouts/
_footer.html.erb:
1: <div id="footer">
2: <ul>
3: <% if logged_in? %>
4: <% if admin? %>
5: <li><%= link_to 'admin'[], admin_path %></li>
6: <% end %>
7: <li><%= link_to 'logout'[], logout_path(:to =>
CGI.escape(request.request_uri)) %></li>

    lib/authenticated_system.rb:4:in `current_site'
    lib/authenticated_system.rb:103:in `login_from_session'
    lib/authenticated_system.rb:16:in `current_user'
    lib/authenticated_system.rb:10:in `logged_in?'
    (eval):2:in `send'
    (eval):2:in `logged_in?'
    app/views/layouts/_footer_1.html.erb:3:in
`_run_erb_47app47views47layouts47_footer_146html46erb'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:637:in `send'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:637:in `compile_and_render_template'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:365:in `render_template'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:316:in `render_file'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:331:in `render'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
partials.rb:117:in `render_partial'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:26:in `benchmark'
    /usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
    /usr/lib/ruby/1.8/benchmark.rb:307:in `realtime'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:26:in `benchmark'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
partials.rb:116:in `render_partial'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:352:in `render'
    app/views/main/index.html.erb:239:in
`_run_erb_47app47views47main47index46html46erb'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:637:in `send'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:637:in `compile_and_render_template'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:365:in `render_template'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:316:in `render_file'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:1100:in `render_for_file'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:836:in `render_with_no_layout'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
layout.rb:262:in `render_without_benchmark'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:51:in `render'
    /usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:51:in `render'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:1153:in `default_render'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:1159:in `perform_action_without_filters'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
filters.rb:697:in `call_filters'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
filters.rb:689:in `perform_action_without_benchmark'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:68:in `perform_action_without_rescue'
    /usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:68:in `perform_action_without_rescue'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
rescue.rb:199:in `perform_action_without_caching'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
caching.rb:678:in `perform_action'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/
connection_adapters/abstract/query_cache.rb:33:in `cache'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/
query_cache.rb:8:in `cache'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
caching.rb:677:in `perform_action'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:524:in `send'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:524:in `process_without_filters'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
filters.rb:685:in `process_without_session_management_support'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
session_management.rb:123:in `process'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:388:in `process'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
dispatcher.rb:171:in `handle_request'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
dispatcher.rb:115:in `dispatch'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
dispatcher.rb:126:in `dispatch_cgi'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
dispatcher.rb:9:in `dispatch'
    /usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:
112:in `handle_dispatch'
    /usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:
78:in `service'
    /usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
    /usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
    /usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
    /usr/lib/ruby/1.8/webrick/server.rb:162:in `start'
    /usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
    /usr/lib/ruby/1.8/webrick/server.rb:95:in `start'
    /usr/lib/ruby/1.8/webrick/server.rb:92:in `each'
    /usr/lib/ruby/1.8/webrick/server.rb:92:in `start'
    /usr/lib/ruby/1.8/webrick/server.rb:23:in `start'
    /usr/lib/ruby/1.8/webrick/server.rb:82:in `start'
    /usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:
62:in `dispatch'
    /usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/servers/
webrick.rb:66
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
    /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/
dependencies.rb:496:in `require'
    /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/
dependencies.rb:342:in `new_constants_in'
    /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/
dependencies.rb:496:in `require'
    /usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
    script/server:3

Rendering /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/templates/rescues/layout.erb (internal_server_error)

# cat _footer.html.erb

    <div id="footer">
      <ul>
        <% if logged_in? %>
          <% if admin? %>
            <li><%= link_to 'admin'[], :controller => 'admin', :action
=> 'index' %></li>
          <% end %>
          <li><%= link_to 'logout'[], logout_path(:to =>
CGI.escape(request.request_uri)) %></li>
        <% else %>
          <li><%= link_to 'join'[], signup_path(:to =>
CGI.escape(request.request_uri)) %></li>
          <li><%= link_to 'login'[], login_path(:to =>
CGI.escape(request.request_uri)) %></li>
        <% end %>
        <li><%= link_to 'terms of use'[], :controller =>
'about', :action => 'terms' %></li>
        <li><%= link_to 'privacy'[], :controller => 'about', :action
=> 'privacy' %></li>
      </ul>
    </div>
  </body>
</html>

# cat _footer.html.erb

    <div id="footer">
      <ul>
        <% if logged_in? %>
          <% if admin? %>
            <li><%= link_to 'admin'[], :controller => 'admin', :action
=> 'index' %></li>
          <% end %>
          <li><%= link_to 'logout'[], logout_path(:to =>
CGI.escape(request.request_uri)) %></li>
        <% else %>
          <li><%= link_to 'join'[], signup_path(:to =>
CGI.escape(request.request_uri)) %></li>
          <li><%= link_to 'login'[], login_path(:to =>
CGI.escape(request.request_uri)) %></li>
        <% end %>
        <li><%= link_to 'terms of use'[], :controller =>
'about', :action => 'terms' %></li>
        <li><%= link_to 'privacy'[], :controller => 'about', :action
=> 'privacy' %></li>
      </ul>
    </div>
  </body>
</html>

I'm looking at the above code and what I see if an internal server error
and the beginnings of an <% if . . .%> and then an <% end %> but then
after that I see and <% else %> that is not matched to any <% if. . .%>.
My guess is that you don't want that <% end %> in there.

-S

Chris Dekker wrote:

I'm looking at the above code and what I see if an internal server error
and the beginnings of an <% if . . .%> and then an <% end %> but then
after that I see and <% else %> that is not matched to any <% if. . .%>.
My guess is that you don't want that <% end %> in there.

-S

What about the <% if admin? %> ?

Your right I didn't see that. I might have miss led you. Just out of
curiosity what does that logged_in? method do? Is that a method you
wrote? From that error that looks like where you problem is originating
from.

@Rails:

Have you patched authenticated_system at all? My guess would be that
either:
* You patched authenticated_system to refer to Site
* Your current_user refers to Site (or, if you're added a NullUser
form when there is no one matching authentication then it does).

A require in authenticated_system or (null_)user should do the trick.

Also, if this is truly a once-in-an-installation problem, then why not
consider having your create_user_table migration create an admin/
superadmin user with a default password?

Thanks a LOT guys these were all supergreat suggestions!! :slight_smile: