4: <%= f.label :username %> [/code]
nie bardzo wiem dlaczego, tzn. wydaje się, że jakby brakowało @user = User.new, ale jak dodam to i tak nie pomaga, ale jest :
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
???
Uh, podstawy panie, podstawy… REST.
typowy lifecycle: new -> create -> show -> edit -> update -> delete
W akcjach new/edit wyświetlasz formularze ktore sa przekazywane do akcji create/update.
Zauważ, że alcje new/edit są wywoływane metodą HTTP GET, co znaczy, że można je wywoływać wielokrotnie bez żadnych skutków na bazie danych. Dopiero create jest wywoływane z metodą POST (tworzenie rekordu) a update z metodą PUT (aktualizacja).
Wniosek? Formularz jest powiązany z metodą new kontrolera
Zadaniem metody create jest utworzenie rekordu na podstawie hasha przekazanego w params[:user].
current_user masz dostępne wszędzie i zawsze mozesz z nich korzystać w authlogic. Wystarczy więc. .
<%= f.label @user %><br />
<%= f.hidden_field (:user_id, :value => current_user.id) %>
No ale lepiej to dać w kontrolerze np. przy zapisie.
@user = User.new(params....)
@user.user.id = current_user.id
no albo jeszcze inaczej
Jak by jednak nie działało to w application_controller.rb daj
[code=ruby] helper_method :current_user
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]
a tak poza tym to ten persistence_token to jedno z pol w bazie jakie powinienes miec, jest chyba wymagane przez authlogic. Dodaj je i tyle
Zdecydowanie zły, bardzo zły pomysł, przecież to ID można podmienić. Najlepiej umieścić odpowiedni kod w modelu w before_save (ostatecznie możesz to wrzucić do kontrolera, ale to chyba nie jest “rails way”). A jeszcze lepiej - jeśli masz odpowiednio ustawione relacje, to po prostu w kontrolerze zamiast czegoś w stylu: