В моем приложении rails у меня есть два метода обновления для обновления профиля пользователей.Ruby on Rails: Добавление дополнительных RESTFUL-действий
Во-первых, у меня будет запрос GET 'account_settings', который будет использовать стандартное действие REST для обновления/обновления для обновления определенных параметров. Затем я хотел бы получить дополнительные действия «edit_profile» и «update_profile», чтобы получить страницу, которая позволит пользователю обновлять различные пользовательские атрибуты. Вот как это выглядит в моем users_controller.rb
для лучшей идеи:
#For account settings page
#This is for the account settings page
#(only changing email and password)
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(account_settings_params)
flash.now[:success] = "Your settings have been successfully updated."
format.html {redirect_to @user}
else
format.html {redirect_to edit_user_path}
flash[:error] = "Please be sure to fill out your email, password, and password confirmation."
end
end
end
def edit_profile
@user = User.find(params[:id])
end
#For update profile
def update_profile
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(user_profile_params)
flash.now[:success] = "Your profile has been updated."
format.html {redirect_to @user}
else
format.html {redirect_to edit_profile_user_path}
flash[:error] = "Please be sure to fill out all the required profile form fields."
end
end
end
private
def account_settings_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
def user_profile_params
params.require(:user).permit(:name, :about_me, :location, :image_url)
end
Выбора из моего текущего routes.rb:
#Account Settings Just for Email and Password
get 'account_settings' => 'users#edit'
patch 'settings' => 'users#update'
resources :users do
member do
get :edit_profile
put :update_profile
end
end
Результатов рек маршрутов:
edit_profile_user GET /users/:id/edit_profile(.:format) users#edit_profile
update_profile_user PATCH /users/:id/update_profile(.:format) users#update_profile
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
Моего NavBar частичный:
-if logged_in?
-# Logged in links
%li
=link_to 'Logout', logout_path, method: :delete
%li
=link_to 'Account Settings',edit_user_path(@current_user)
%li
=link_to 'Edit My Profile', edit_profile_user_path(@current_user)
%li
=link_to 'View My Profile', user_path(@current_user)
%li
=link_to 'Members', users_path
На странице edit_profile, моя форма выглядит следующим образом:
=form_for @user, path: update_profile_user_path(@user) do |f|
С моей текущей реализацией, посетив страницу edit_profile и размещение формы приведет обратно на обычную страницу редактирования с моими Рельсами сервер о том, что параметры были неразрешенными , Однако, как вы можете видеть в моем методе update_profile в моем контроллере, метод контроллера для update_profile принимает user_profile_params
, а не account_settings_params
. Любое понимание того, почему это может быть сделано?
использовать 'member' или' collection' блок внутри маршрутов пользователей – uzaif