私はdevilsをレールアプリにインストールしました。ユーザーがログインしている場合、他のすべてのユーザー編集ページにアクセスできます。Deviseはユーザーを編集するために正確なIDを制御しません
たとえば、私はuser_id 2です。ユーザー1/3/4/5のプロフィールを編集することができます。経路内で手作業でパラメータを変更すると、編集できます。ここで
私のアプリコントローラー:
class ApplicationController < ActionController::Base
protect_from_forgery
before_action :authenticate_user!
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
# For additional fields in app/views/devise/registrations/new.html.erb
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :company, :position, :office_phone, :mobile_phone, :address, :description, :radius, :photo_company_logo, :photo_presentation, photos_projet_1: [], photos_projet_2: [], photos_projet_3: [], photos_projet_4: []])
# For additional in app/views/devise/registrations/edit.html.erb
devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :company, :position, :office_phone, :mobile_phone, :address, :description, :radius, :photo_company_logo, :photo_presentation, photos_projet_1: [], photos_projet_2: [], photos_projet_3: [], photos_projet_4: []])
end
end
ここに私のユーザーコントローラー:ここ
class UsersController < ApplicationController
skip_before_action :authenticate_user!, only: [:index, :show]
before_action :set_user, only: [:show, :edit, :update]
def index
@client = Client.new
@users = User.all
@users = User.where.not(latitude: nil, longitude: nil)
@hash = Gmaps4rails.build_markers(@users) do |user, marker|
marker.lat user.latitude
marker.lng user.longitude
end
end
def show
@client = Client.new
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
@user.save
redirect_to users_path
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
@user.update(user_params)
redirect_to user_path(@user)
end
private
def user_params
params.require(:user).permit(:company, :first_name, :last_name, :position, :mobile_phone, :office_phone, :email, :address, :description, :radius, :nettoyage_toiture, :photo_company_logo, :photo_presentation, photos_projet_1: [], photos_projet_2: [], photos_projet_3: [], photos_projet_4: [])
end
def set_user
@user = User.find(params[:id])
end
end
ミューUserモデル:
class User < ApplicationRecord
has_attachment :photo_presentation
has_attachment :photo_company_logo
has_many :projects, dependent: :nullify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
#geocoder for google maps
geocoded_by :address
after_validation :geocode, if: :address_changed?
end
ここに私のルート:
Rails.application.routes.draw do
ActiveAdmin.routes(self)
devise_for :users
root to: 'pages#home'
resources :users do
resources :projects
end
resources :clients, only: [:new, :create, :show]
mount Attachinary::Engine => "/attachinary"
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
ありがとうございました!
あなたのルートも共有できますか? – whodini9
whodiniこんにちは、ここに私のルート:ユーザー ルートへ: 'ページ番号ホーム' 資源: – Tana
Rails.application.routes.draw ActiveAdmin.routes(自己) devise_forを行うプロジェクト エンド リソース:ユーザーが リソースを行います:クライアント:[:new、:create、:show] マウントAttachinary :: Engine => "/ attachinary" #このファイルで利用できるDSLの詳細については、http://guides.rubyonrails.org/を参照してください。 routing.html end – Tana