简体   繁体   中英

Rails webpage has a redirect loop ERR_TOO_MANY_REDIRECTS

I added this code to my create action in users_controller.rb and get this error all the time now. I have googled and reset browser settings, deleted cookies, etc. but it´s not working.

I´m using PG as a localserver.

Can anyone take a look at this and direct me to the right path

def create
  @paper = current_user.papers.build(paper_params)
  @electro = current_user.electros.build(electro_params)
  @hwater = current_user.hwaters.build(hwater_params)

 if @paper.save or @electro.save or @hwater.save 
  flash[:success] = "Messages sent."
  redirect_to user_path(@user)
 else
  flash[:danger] = "Error occured, message has not been sent."
  redirect_to user_path
 end   
end

Before, the code was like this and it worked fine:

def create
 @paper = current_user.papers.build(paper_params)
 @electro = current_user.electros.build(electro_params)


if @paper.save, @electro.save, @hwater.save 
  flash[:success] = "Messages sent."
  redirect_to paper_path(@paper)
else
  flash[:danger] = "Error occured, message has not been sent."
  redirect_to new_paper_path
end   

@electro = current_user.electros.build(electro_params)

if @electro.save
  flash[:success] = "Messages sent."
  redirect_to electros_path(@electro)
else
  flash[:danger] = "Error occured, message has not been sent."
  redirect_to new_electros_path
end   

end

This is users_controller.rb:

class UsersController < ApplicationController
 before_action :set_paper, only: [:edit, :update, :show, :destroy]
 before_action :set_electro, only: [:edit, :update, :show, :destroy]
 before_action :set_hwater, only: [:edit, :update, :show, :destroy]

def index
    @users = User.all
@users = User.order('created_at DESC').paginate(page: params[:page], per_page: 30)


end

def create
  @paper = current_user.papers.build(paper_params)
  @electro = current_user.electros.build(electro_params)
  @hwater = current_user.hwaters.build(hwater_params)

 if @paper.save or @electro.save or @hwater.save 
  flash[:success] = "Messages sent."
  redirect_to user_path(@user)
 else
  flash[:danger] = "Error occured, message has not been sent."
  redirect_to user_path
 end   
end


 def show

    @user = User.find(params[:id])
   @users = User.order('created_at DESC').paginate(page: params[:page], per_page: 30)
  @electro_total = current_user.electros.sum(:electricity_kwst) 
  @paper = current_user.papers.build
  @electro = current_user.electros.build
  @hwater = current_user.hwaters.build
end

 def compare
  if current_user.profile
  @user = User.find_by(id: params[:to].to_i) if params[:to]

    @paper_weight_total_user = @user.papers.sum(:paper_weight) 
    @paper_weight_per_capita_user = @user.papers.sum(:paper_weight) / (@user.profile.staff) 
    @env_paper_weight_user = @user.papers.sum(:env_paper_weight)
    @env_paper_ratio_user = (@env_paper_weight_user / @paper_weight_total_user) * 100   

    @paper_tree_ratio_user = (@user.papers.sum(:paper_weight) / 1000) *15 
    @paper_tree_co2_rescue_user = @paper_tree_ratio_user * (0.492)

    #Rafmagn  
       @electro_total_user = @user.electros.sum(:electricity_kwst)
       @electro_total_per_capita_user = @user.electros.sum(:electricity_kwst) / @user.profile.staff 
       @electro_total_per_m2_user = @user.electros.sum(:electricity_kwst) / @user.profile.building_size
    #HotWater    
      @hwater_total_m3_user = @user.hwaters.sum(:hot_water_cubic_meter) 
       @hwater_total_m3_per_capita_user = @user.hwaters.sum(:hot_water_cubic_meter) /@user.profile.staff
       @hwater_m3_m2_ratio_user = @user.hwaters.sum(:hot_water_cubic_meter) / @user.profile.building_size   

    #Ræsting
       @cleaning_total_user = @user.cleanings.sum(:cleaning_liter)
       @cleaning_staff_ratio_user = @user.cleanings.sum(:cleaning_liter) / @user.profile.staff
       @cleaning_building_ratio_user = @user.cleanings.sum(:cleaning_liter) / @user.profile.building_size   

    #Ferðalog-bilar
       @transport_co2_km_user = @user.transports.sum(:transport_km) * (0.1404)
       @transport_co2_km_staff_ratio_user = @user.transports.sum(:transport_km) * (0.1404) / @user.profile.staff
       @transport_km_staff_ratio_user = @user.transports.sum(:transport_km) / @user.profile.staff
       @transport_km_user = @user.transports.sum(:transport_km)
    #Ferðalog-flug
      @transport_flight_co2_user = @user.transports.sum(:transport_flight_km) * (0.1722)   
      @transport_flight_co2_staff_ratio_user = @user.transports.sum(:transport_flight_km) * (0.1722) / @user.profile.staff
      @transport_flight_km_user = @user.transports.sum(:transport_flight_km) 
      @transport_flight_km_staff_ratio_user = @user.transports.sum(:transport_flight_km) / @user.profile.staff

    #Co2 vegna ferðalaga
      @co2_due_to_transport_user = (@transport_flight_co2 + @transport_co2_km) / 1000

      @tree_count_rescue_user = @co2_due_to_transport * 492    
else
    redirect_to user_path
end
end

 private
  def set_paper
   @paper = Paper.find(params[:id])
  end

 def paper_params
  params.require(:paper).permit(:paper_type, :date, :paper_weight, :paper_cost, :env_paper_weight)
 end

def set_electro
    @electro = Electro.find(params[:id])  
  end

  def electro_params
    params.require(:electro).permit(:date, :building_name, :electricity_kwst, :electricity_cost, :kwst_staff_ratio, :kwst_square_meter_ratio, :user_id)
  end 

  def set_hwater
    @hwater = Hwater.find(params[:id])
  end

  def hwater_params
    params.require(:hwater).permit(:date, :building_name, :hot_water_cost, :hot_water_cubic_meter, :hot_water_m2_m3_ratio, :hot_water_m3_staff_ratio, :user_id)
  end

end

I'm not entirely sure what the goal of your application is, however this is a little bit suspicious:

if @paper.save or @electro.save or @hwater.save 
  flash[:success] = "Messages sent."
  redirect_to user_path(@user)
else
  flash[:danger] = "Error occured, message has not been sent."
  redirect_to user_path
end   

In addition to what @BroiSatse says in his comment, shouldn't the second redirect_to be redirect_to new_user_path ? Like this:

if @paper.save or @electro.save or @hwater.save 
  flash[:success] = "Messages sent."
  redirect_to user_path(@user)
else
  flash[:danger] = "Error occured, message has not been sent."
  redirect_to new_user_path
end   

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM