Problem z walidatorem :unigeness przy edycji

Postanowiłem użyć walidatora ‘uniqueness’ dla nazwy użytkownika.
Jednak przy edycji, także dostaje komunikat że dana nazwa jest zajęta :confused: Jak to obejść ?

Poniżej mój kod:
Podeśle kod w kilku postach, gdyż to forum nie pozwala mi wysyłać długich wiadomości :confused:

Kontroler

[code]
def edit
@user = User.find(auth_user)
end

def update
@user = User.new(params[:user])

if @user.save
  flash[:notice] = 'Edycja danych zakończyła się pomyślnie'
  redirect_to :account
else
  render :action => 'edit'
end

end[/code]

Widok

<%= form_for @user, :url => :account do |f| %> <%= f.label :username, "Nazwa użytkownika:" %> <%= f.text_field :username %><br /> ... <%= f.submit %> <% end %>

[quote=sajrox]Postanowiłem użyć walidatora ‘unigeness’ dla nazwy użytkownika.
Jednak przy edycji, także dostaje komunikat że dana nazwa jest zajęta :confused: Jak to obejść ?

Poniżej mój kod:
Podeśle kod w kilku postach, gdyż to forum nie pozwala mi wysyłać długich wiadomości :/[/quote]
http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_uniqueness_of
Myślę, że powinieneś użyć uniqueness zamiast unigeness :wink:

Zamiast:

@user = User.new(params[:user]) @user.save
zrób @user = User.find(params[:id]) @user.update_attributes(params[:user])

Kod od @pski działa znakomicie :slight_smile: JEdnak mam jeszcze jeden problem z routerem.

resource :account get 'register' => 'accounts#new', :as => :register post 'register' => 'accounts#create'
Tutaj chciałbym aby akcję ‘new’ można było wywołać tylko z linku “/register”, blokując dostęp z “/account/new”. Jak tego dokonać?

Spróbuj:

resource :account, :except => :new

Sekcja o routingu jest dość dobrze przygotowana na Rails Guides - polecam :slight_smile: