Problem z walidacja logowania

Witam

Mam strone - http://yourspace.x25.pl/
kiedy klikniemy na zaloz nowe konto
wyswietla nam sie formularz do rejestracji i teraz mam konflikt z logowaniem u gory - logowanie to plik /views/user_sessions/new.html.erb
a rejestracja to views/user/_form.html.erb

wpsialem zeby walidowal username
class User < ActiveRecord::Base
validates_presence_of :username
acts_as_authentic
end

i teraz kiedy wpisze wszystkie pola oprocz username dostaje blad
Showing app/views/user_sessions/new.html.erb where line #2 raised:

Called id for nil, which would mistakenly be 4 – if you really wanted the id of nil, use object_id

kiedy wyrzuce caly kod z /views/user_sessions/new.html.erb to jest ok walidacja dziala , jak to rozgraniczyc zeby logowanie nie robilo konfliktu z rejestracja

bede wdzieczny za pomoc , Pozdrawiam

Przerobilem sobie logowanie na partiala ale nadal jest konflikt , jak mam rejestracje i logowanie na jednej stronie to mi sie burzy
RuntimeError in Users#create

Showing app/views/user_sessions/_form.html.erb where line #2 raised:

Called id for nil, which would mistakenly be 4 – if you really wanted the id of nil, use object_id

Extracted source (around line #2):

1:


2: <% form_for @user_session do |f| %>
3: <%= f.error_messages %>
4: LOGIN:
5: <%= f.text_field :username %>

Trace of template inclusion: app/views/home/_top.html.erb, app/views/layouts/application.html.erb

RAILS_ROOT: /home/kalek/rails/yourspace

kiedy nie ma logowania wszystko jest ok , rejestracja ma wtedy lanie walidacje

bardzo prosze o pomoc

Poradzilem sobie w ten sposob ze dla kontrolera user mam inny layout i dla niego zalaczam inny top ktory nie ma opcji logowania i chodzi wszystko ladnie
ale jezeli dalby rade ktos wytlumaczyc mi jak zrobic zeby mogly byc 2 formularze na jednej stronie czyli logowania formularz i rejestracji i zeby one sie ze soba nie gryzly to bylbym wdzieczny pozdrawiam

Dziwna sytuacja, tym bardziej że te pola formularza się inaczej nazywają. Jedyne co mi przychodzi do głowy to, że przy rejestracji od razu logujesz użytkownika i to nawet wtedy gdy nie jest on poprawny i nie został zapisany

hey , zrobilem aby nie logowal automatycznie po zarejestrowanie ale to nic nie dalo nadal

Called id for nil, which would mistakenly be 4 – if you really wanted the id of nil, use object_id

mozesz luknac na stronie http://yourspace.x25.pl/users/new

kiedy u gory jest logowanie to jest blad jak wywale zeby u gory nie bylo logowania to jest ok walidacja dziala
jakis pomysl moze ??

mogę sie mylić, ale czy w szablonie app/views/user_sessions/_form.html.erb nie powinno być przypadkiem form_for :user ?

Generalnie dostajesz info że zmienna @user_session = nil. Czy w kontrolerze users w akcji create ustawiasz zmienną @user_session?

Najlepiej pokaż user sessions controller i szablon user_session/new|login czy jak go tam sobie nazwałes

user_session_controller

class UserSessionsController < ApplicationController
def new
@user_session = UserSession.new
end

def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = “Successfully logged in.”
redirect_to root_url
else
render :action => ‘new’
end
end

def destroy
@user_session = UserSession.find
@user_session.destroy
flash[:notice] = “Successfully logged out.”
redirect_to root_url
end
end

user_sessions/_form.html.erb

<% form_for @user_session do |f| %> <%= f.error_messages %> LOGIN: <%= f.text_field :username %> HASŁO: <%= f.password_field :password %>
<%= f.submit "Zaloguj się" %>
<% end %>

moze pomozecie ??

jeszcze moze user_controller

class UsersController < ApplicationController
def new
@user_session = UserSession.new
@user = User.new
end

def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = “Successfully created user.”
redirect_to root_url
else
render :action => ‘new’
end
end

def edit
@user = current_user
end

def update
@user = current_user
if @user.update_attributes(params[:user])
flash[:notice] = “Successfully updated user.”
redirect_to root_url
else
render :action => ‘edit’
end
end
end

dzieki wielkie squil pomoglo dodanie @user_session = UserSession.new do kontrolera user w akcji create dzieki wilelkie , pozdroo
super :slight_smile:

Tutaj:
http://rubyonrails.pl/forum/p19417-2010-06-10-18%3A47%3A11#p19417
masz lepsze rozwiązanie, nie ma sensu tworzyć zmiennej @user_session w kilku kontrolerach.

Ja mam te rzeczy w ApplicationController, z jakiegoś tutorialu do Authlogica

[code=ruby]helper_method :current_user, :current_user_session

private

def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end

def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end[/code]

fastred , dzieki za linka , pozdrawiam