New to Rails. Using Authlogic for authentication and went through
tutorial at github. Having a bit of a problem getting the login
screen to render as a partial from a different view file.
I have a index.html.erb view file for the "home" controller.
I tried <%= render :partial => "user_sessions/user_session" %>
but it fails with this error:
"Called id for nil, which would mistakenly be 4 -- if you really
wanted the id of nil, use object_id"
user_sessions is the view directory for the login form created through
the Authlogic tutorial. I created a partial called
_user_session.html.erb which contains the entire login form and looks
like this:
A guess, as I don't have the full backtrace and don't know what the
controller that passes to the view that calls the partial rendering
does: is the @user_session instance variable nil?
The controller is the "home" controller and looks like this (very
basic):
class HomeController < ApplicationController
def index
end
end
The view for the home controller is is just a basic home page and I
just wanted to render a login partial there since I'm also planning to
use it elsewhere in the app.
I assumed that there is no user_session, since a user is not logged in
at this point. So, I didn't think I would need to pass it anything.
I can hit http://mysite/lgoin without passing any instance variables
and it shows the partial properly.
Here's a trace:
Showing app/views/user_sessions/_user_session.html.erb where line #1
raised:
Called id for nil, which would mistakenly be 4 -- if you really wanted
the id of nil, use object_id
Try <% form_for UserSession.new ... if you want the form to work
anywhere, or make sure that @user_session is set in the controller,
eg. @user_session = UserSession.new
pabcas - Thanks for responding to my question. I really appreciate
the help. Changing my partial to use "UserSession.new" seemed to
work. The "home" page was able to render properly.
I checked the user_sessions_controller.rb file and I have this method
defined.
Paul - Just an update. Although changing the partial as you suggested
allowed the "home" page to render properly, I think it also kept
Authlogic from working properly.
When the partial contains this:
<% form_for UserSession.new :url => user_session_path do |f| %>
I get nothing from Authlogic when I hit the Login button with no
credentials entered.
But when I revert to its original form:
<% form_for @user_session, :url => user_session_path do |f| %>