ruby on railsでアプリケーションを作成しています。deviseでログインと会員登録機能を作成し、ユーザー詳細ページと登録内容(名前・メール・パスワード等)を編集するページを追加しました。
直面している問題が2つあります。
1,変更するのボタンを押した後、ユーザー詳細ページにリダイレクトしない
2,登録内容が反映されない
※またパスワードを入力しなくても変更できるようにコードをかいていますが、正しくかけているかはわかりません。
該当コード
ルーティング
Rails.application.routes.draw do get 'twitters/index' devise_for :users, controllers: { registrations: 'registrations' }, controllers: { omniauth_callbacks: 'users/omniauth_callbacks'} get 'tops/index' root to: 'tops#index' get '/users/:id', to: 'users#show', as: 'user' patch 'users/:id', to: 'users#update' #get '/users/edit/:id', to: 'users#edit', as: 'edit_user' resources :posts, only: %i(new create show destroy) do resources :photos, only: %i(create) resources :likes, only: %i(create destroy) end # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html end
コントローラー
class RegistrationsController < Devise::RegistrationsController protected def update_resource(resource, params) resource.update_without_current_password(params) end def after_update_path_for(resource) user_path(resource) end end
モデル
class User < ApplicationRecord mount_uploader :image, ImageUploader has_many :posts, dependent: :destroy has_many :likes # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :omniauthable def self.fin_for_oauth(auth) user = User.where(uid: auth.uid, provider: auth.provider).first unless user user = User.create( uid: auth.uid, provider: auth.provider, email: User.dummy_email(auth), password: Devise.friendly_token[0, 20], image: auth.info.image, name: auth.info.name, nickname: auth.info.nickname, location: auth.info.location ) end user end validates :name, presence: true, length: { maximum: 30 } def update_without_current_password(params, *options) params.delete(:current_password) if params[:password].blank? && params[:password_confirmation].blank? params.delete(:password) params.delete(:password_confirmation) end result = update_attributes(params, *options) clean_up_passwords result end private def self.dummy_email(auth) "#{auth.uid}-#{auth.provider}@example.com" end end
ビュー(ユーザー詳細ページ)
<h3 class="text-center text-secondary mb-4">ユーザー情報</h3> <div class="row col-lg-6 offset-lg-3"> <div class="offset-lg-2 col-lg-4 text-center profile-image mb-3"> <%= form_for(@user) do |f| %> <% if @user.image? %> <%= image_tag @user.image.thumb.url, class: "round-img" %> <% else %> <%= image_tag "/assets/default.jpg", class: "round-img" %> <% end %> <% end %> </div> <div class="col-lg-6 text-center profile-text mb-3"> <h3><%= @user.name %></h3> <% if @user == current_user %> <p><%= @user.email %></p> <%= link_to "プロフィール編集", edit_user_registration_path, class: "btn btn-outline-dark common-btn edit-profile-btn" %> <% end %> </div> </div>
ビュー(登録内容編集ページ)
<h3 class="text-center text-secondary form-group">登録情報変更</h3> <div class="card-header"> <%= form_with scope: resource, as: resource_name, url: registration_path(resource_name), local: true, method: :patch do |f| %> <div class="ield form-group mt-3 text-center col-sm-6 offset-sm-3"> <p>プロフィール画像変更</p> <button type="button" class="btn btn-outline-secondary rounded-pill"> <%= f.file_field :image, accept: 'image/jpg,image/gif,image/png' %> </button> </div> <div class="ield form-group mt-3 text-center col-sm-6 offset-sm-3"> <%= f.label :name, "名前" %> <%= f.text_field :name, autofocus: true, class: "form-control" %> </div> <div class="ield form-group mt-3 text-center col-sm-6 offset-sm-3"> <%= f.label :email, "メールアドレス" %> <%= f.email_field :email, autofocus: true, class: "form-control" %> </div> <div class="ield form-group mt-3 text-center col-sm-6 offset-sm-3"> <%= f.label :password, "パスワード" %> <%= f.password_field :password, autofocus: "off", class: "form-control" %> </div> <div class="ield form-group mt-3 text-center col-sm-6 offset-sm-3"> <%= f.label :password_confirmation, "パスワード確認" %> <%= f.password_field :password_confirmation, autofocus: "off", class: "form-control" %> </div> <div class="actions form-group col-sm-6 offset-sm-3"> <%= f.submit "変更する", class: "btn btn-primary form-control" %> </div> <% end %> </div>
ご教授頂ければ幸いです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。