@Fahrenhei7

Rails. Не выполняется update_attributes, или же выполняется, но странно?

Всем привет. Использую 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, выдает правильную страницу
kvVoGbM.png

Вводим новые данные в форму, нажимаем сабмит и происходит то, что в контроллере прописано как else, то - есть render 'edit', НО, оно рендерит новую страницу и в тайтле показывает новые данные, то-есть локально на edit.html.haml #{@user.name} это обновилось, а в бд - нет.
T1eDBEt.png
Что я делаю не так?
Вот ещё скриншот, если как-то поможет.
R2ykeKU.png
  • Вопрос задан
  • 332 просмотра
Решения вопроса 1
nbekseitov
@nbekseitov
Ruby developer
Скорее всего ошибка в валидации. По умолчанию devise требует вводить текущий пароль для подтверждения изменений.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы