Всем привет. Использую devise, хочу сделать update user от своего контроллера. Но все делается очень странно.
routes.rb
get 'users/:id' => 'users#show', :as => :user
get 'edit' => 'users#edit'
patch "edit" => "users#update"
devise_for :users, :path => '', controllers: {
sessions: 'custom_sessions',
registrations: 'custom_registrations'
}, :path_names => { :sign_up => 'signup',
:sign_out => 'logout',
:sign_in => 'login',
:edit => nil }
resources :notes
root 'notes#index'
users_controller.rb
def edit
@user = current_user
end
def update
@user = User.find(current_user.id)
if @user.update_attributes(user_params)
flash[:notice] = "Profile successfully updated"
redirect_to root_path
else
render 'edit'
end
end
private
def user_params
params[:user].permit(:name)
end
И сама форма:
-provide(:title, "#{@user.name}")
=form_for @user, url: edit_path, method: :patch do |f|
=f.text_field :name
=f.submit "update"
В общем и целом что происходит.
localhost:3000/edit, выдает правильную страницу
Вводим новые данные в форму, нажимаем сабмит и происходит то, что в контроллере прописано как else, то - есть render 'edit', НО, оно рендерит новую страницу и в тайтле показывает новые данные, то-есть локально на edit.html.haml #{@user.name} это обновилось, а в бд - нет.
Что я делаю не так?
Вот ещё скриншот, если как-то поможет.