ruby on rails - Updating params in URL after forced/manual input -


i using devise user system set model tutor associated model profile whereby tutor has_one :profile , profile belongs_to :tutor. therefore tutor_id foreign key associates each profile entry tutor entry.

in profile model, have usual rails rest methods new, edit, show, create , update.

when accessing profile#edit via uri /profiles/:id/edit, edits made correctly corresponding tutor model of profile regardless of what's entered in place of :id in url, seems kind of awkward url not reflect this.

so if tutor tutor_id: 2 , profile id: 2 signed in, accessing edit action via /profiles/4/edit or /profiles/afjsdjfdsj/edit somehow produces same result accessing proper url /profiles/2/edit , still update correct profile of tutor.

what want update url in address bar reflect profile id: 2. i've tried using redirect_to in edit method in profilescontroller no avail:

#app/assets/controllers/profiles_controller.rb def edit     ...     @profile = current_tutor.profile     if @profile.id != params[:id]         redirect_to edit_profile_path(@profile.id)     end     ... end  

here profiles_controller.rb

# app/assets/controllers/profiles_controller.rb class profilescontroller < applicationcontroller   before_action :authenticate_tutor!, except: [:show]    # handled edit page   def new     @tutor = current_tutor      if (@tutor.profile.nil?)       @profile = @tutor.build_profile     else       @profile = @tutor.profile       redirect_to edit_profile_path(@profile.id)     end   end    def edit     @tutor = current_tutor      if (@tutor.profile.nil?)       redirect_to new_profile_path     else         @profile = @tutor.profile     end   end    def show     if tutor_signed_in?       @tutor = tutor.find(current_tutor.id)       @profile = profile.find(@tutor.profile.id)     else       @profile = profile.find(params[:id])     end   end      # post /tutors   # post /tutors.json   def create     @profile = current_tutor.build_profile(profile_params)     if @profile.save       flash[:success] = "profile created!"       redirect_to tutors_dashboard_path     else       render 'new'     end   end      # patch/put /tutors/1   # patch/put /tutors/1.json   def update     @profile = profile.find(current_tutor.id)     if @profile.update(profile_params)      flash[:success] = "profile updated!"      redirect_to tutors_dashboard_path    else      render 'edit'    end  end   private    def profile_params    params.require(:profile).permit(:first_name, :last_name, :postal_code, :gender, :dob, :rate, :alma_mater, :major, :degree, :address, :phone_num, :travel_radius, :bio)  end  end 

here routes.rb

rails.application.routes.draw    root 'pages#home'    '/about' => 'pages#about'   '/contact' => 'pages#contact'   '/about-tutors' => 'pages#about_tutors'   '/about-students' => 'pages#about_students'    devise_for :tutors, controllers: {     confirmations: 'tutors/confirmations',     passwords: 'tutors/passwords',     registrations: 'tutors/registrations',     sessions: 'tutors/sessions'   }    '/tutors/dashboard' => 'tutors#dashboard'    resources :profiles end 

after frustration, figured out params[:id] returns string , not integer, therefore to_i required compare two.

correct code:

#app/assets/controllers/profiles_controller.rb def edit     ...     @profile = current_tutor.profile     if @profile.id != params[:id].to_i   # convert params[:id] integer value         redirect_to edit_profile_path(@profile.id)     end     ... end  

Comments

Popular posts from this blog

javascript - gulp-nodemon - nodejs restart after file change - Error: listen EADDRINUSE events.js:85 -

Fatal Python error: Py_Initialize: unable to load the file system codec. ImportError: No module named 'encodings' -

javascript - oscilloscope of speaker input stops rendering after a few seconds -