Authlogic - formularz logowania dostępny na innej stronie

Witam,

bawię się troszeczkę pluginami - ostatnio authlogic.
Zrobiłem sobie logowanie rejestracje itp. itd.

Ale natknąłem się na kolejny problem mianowicie:

mam sobie controller Statics:

[code]class StaticsController < ApplicationController
def home
# domyslam sie ze tu musi byc deklaracja ktorz udostepni nam funkcjonalnosc logowania
end

def about
end
end[/code]
gdzie będą strony statyczne oraz strona główna.
Mam także wygenerowany widok home.erb.html.

w routingu root ustawiony jest właśnie na home:

map.root :controller => 'statics', :action => 'home'

mam także wszystkie wygenerowane wpliki authlogica tzn: user, user_session i pozostałe - tu dla mnie naistotniejszym jest user_session gdzie w widoku new.erb.html jest formularz logowania.
Moje pytanie brzmi jak mogę “zaincludować” ten formularz do widoku home’a - home.erb.html tak by formularz był tam widoczny i nie stracił swej funkcjonalnosci ?

Pytanie te zadaje na podstawie authlogica bo najprościej tu było zobrazować o co mi chodzi ale taki manewr chciałbym przeprowadzać z większą ilością rzeczy.

formularz logowania jako partial i potem go wrzucasz gdzie Ci się żywnie podoba

http://api.rubyonrails.org/classes/ActionView/Partials.html

właściwie to już próbowałem za pomocą partiali:

ten kod wywołany w katalogu statics w pliku home.erb.html:

<%= render :partial => "user_session/form" %>

ale wywala mi błąd:

[quote]Showing app/views/user_sessions/_form.erb where line #1 raised:

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

Extracted source (around line #1):

1: <% form_for @user_session, :url => user_session_path do |f| %>
2: <%= f.error_messages %>
3: <%= f.label :email %>

4: <%= f.text_field :email %>
[/quote]
dlatego też tj. napisałem wyzej domyślam się że coś muszę wpisać między:

def home

tutaj

end

ale nie wiem co …

Podpowiedź: Nie masz ustawionej zmiennej @user_session. W kontrolerze user_session_controller, powinna ona być inicjalizowana, w akcji new.

no właśnie że mam oto dowód:

[code]class UserSessionsController < ApplicationController
before_filter :require_no_user, :only => [:new, :create]
before_filter :require_user, :only => :destroy

def new
@user_session = UserSession.new
end

def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = “Login successful!”
redirect_back_or_default account_url
else
render :action => :new
end
end

def destroy
current_user_session.destroy
flash[:notice] = “Logout successful!”
redirect_back_or_default new_user_session_url
end
end[/code]

Nie przekazujesz @user_session do partiala

<%= render :partial => "user_session/form", :locals => {:user_session => @user_session } %> #albo <%= render "user_session/form", :user_session => @user_session %>

<% form_for user_session, :url => user_session_path do |f| %> #partial
<% form_for(@user_session || UserSession.new, :url => user_session_path) do |f| %>

To powinno zadziałać.

działa :smiley:
super dzięki.