Witam
Ostatnio mnie dopadł taki problem. Projektuję panel administracyjny dla aplikacji i chcę, żeby tylko użytkownicy ze statusem admin mieli tam wejście, więc w admin/users_controller.rb mam:
[code=ruby]before_filter :authenticate
…
def edit @user = User.find(params[:id])
end
def update
if @user.update_attributes(params[:user])
flash[:success] = “Uaktualniono profil #{@user.id}”
redirect_to @user
else
render :edit, :id => @user.id
end
end
…
private
Żądanie GET edit wykonuje się poprawnie, natomiast do POST update dociera jakby pusty obiekt @user.
edit.html.erb:
<%= content_tag :h3, "Edytuj użytkownika #{@user.name} (#{@user.email})" %>
<%= semantic_form_for @user, :url => admin_user_path(@user.id) do |f| %>
<%= f.inputs do %>
<%= f.input :admin, :as => :boolean %>
<%= f.input :name %>
<%= f.input :email %>
<%= f.input :password %>
<%= f.input :password_confirmation %>
<% end -%>
<%= f.buttons do %>
<%= f.commit_button :label => "Uaktualnij" %>
<% end -%>
<% end -%>
W routes.rb mam:
namespace "admin" do
root :to => "pages#index"
resources :users
end
Efektem jest to, że otrzymuję błąd undefined method `update_attributes' for nil:NilClass
Co może być nie tak?
Myślałem o takim rozwiązaniu, jednak pisząc ten kontroler wzorowałem się na kontrolerze users z trzonu aplikacji. Tam to wygląda tak:
users_controller.rb
def edit
@title = t('app.titles.edit_user')
end
...
def update
respond_to do |format|
if @user.update_attributes(params[:user])
format.html {
flash[:success] = t('app.messages.updated_user')
redirect_to(@user)
}
format.xml { head :ok }
else
format.html {
@title = t('app.titles.edit_user')
render 'edit'
}
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
I wszystko działa jak należy. Żadnych inicjalizacji. Magia świąt czy co?
[quote=bfo]Witam
Projektuję panel administracyjny dla aplikacji i chcę, żeby tylko użytkownicy ze statusem admin mieli tam wejście[/quote]
proponuje zapoznac sie z tym http://github.com/ryanb/cancan