Я борюсь с этой проблемой на прошлой неделе или около того, и я перепробовал все, что мог придумать, поэтому мне нужна ваша помощь ..! Я использую devise и devise invitable
Я создал страницу для редактирования информации о пользователе, такой как имя пользователя, имя, фамилия...
# /controllers/settings_controllers.rb
class SettingsController < ApplicationController
def info
@user = current_user
end
end
# /controllers/users_controllers.rb
class UsersController < Devise::SessionsController
def update
@user = User.find(current_user.id)
if @user.update_attributes(user_params)
redirect_to :back
end
end
end
# /views/settings/info.html.erb
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :username %>
<%= f.text_field :username %>
<%= f.label :firstname %>
<%= f.text_field :firstname %>
....
<% button_value = "Update" %>
<% end %>
Мои маршруты:
devise_for :users ,:controllers => { :invitations => 'users/invitations' }
resources :users, only: [:edit, :update]
devise_for :users, :skip => [:registrations]
as :user do
get 'user/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
put 'user' => 'devise/registrations#update', :as => 'user_registration'
end
devise_scope :user do
authenticated :user do
root :to => 'aggregator#index'
end
unauthenticated :user do
root :to => 'devise/sessions#new'
end
get "users/new" => "users#new"
get "users/:id" => "users#show"
end
match 'settings/info' => 'settings#info', :as => 'info'
Когда я пытаюсь обновить форму, у меня возникает следующая ошибка (мой идентификатор пользователя равен 1):
Could not find devise mapping for path "/users/1"
Изменить
Итак, я поставил resources :users, only: [:edit, :update]
после devise_for :users
, как предложил @coletrain, и ошибка исчезла. Но он перенаправляет на мой профиль /users/1
, когда я хочу, чтобы меня перенаправили на /settings/info
, и, что более важно, он не обновляет мою информацию... Я предполагаю, что метод обновления в users_controller недоступен.
@user = current_user
на@user = User.find(current_user.id)
. После этого напишите оператор if, который в случае успеха перенаправляет на желаемую страницу или в случае неудачи перенаправляет обратно на страницу редактирования. Дайте мне знать, если это работает. - person coletrain   schedule 01.10.2013