我的预订数据库和汽车数据库之间存在多对多的关系,以下是我的预订控制器并发送到帖子。
def reserveConfirm
pick_time = params[:pick_y].to_s+"-"+params[:pick_m].to_s+"-"+params[:pick_d].to_s+" "+"#{params[:pick_h]}:00:00"
return_time = params[:return_y].to_s+"-"+params[:return_m].to_s+"-"+params[:return_d].to_s+" "+"#{params[:return_h]}:00:00"
#@reservation = Reservation.find(params[:id])
@car = Car.where(:id => params[:car_id]).update(:status => 'reserved')
@reservation = Reservation.new(status:'reserved',
pick_up_time: pick_time,
return_time: return_time,
user_id:current_user.id)
if @reservation.save
#flash[:success] = @reservation.id
flash[:success] = 'shit'
redirect_to(:action => 'history',:notice => 'Check out was successfully created.',:id =>current_user.id )
else
flash[:success] = 'success'
format.html { render action: "reserve" }
format.json { render json: @reservation.errors.full_messages, status: :unprocessable_entity }
end
end
事情从这里开始变得混乱。在我的预订控制器中,每次我想要params [:id],我都没有得到预订ID。我创建了新的预订并将其路由到行动预约。 [:id]似乎是nil或car_id,因为我的链接是预订/:id(:格式),而且这个:id不知何故是汽车ID而不是我的新预订ID。我的预约行动确实是Reservation.new
def reserve
@reservation = Reservation.new
@car = Car.find(params[:car_id])
if @car == nil
flash[:danger] = "no car found"
else
flash[:danger] = @car.id
end
respond_to do |format|
format.html # new.html.erb
format.json { render json: @reservation }
end
end
我在丛林中,一切都在树林里缠结。 在预约行动中,我可以通过car_id找到car,这是预订/:id提交,这里是2。但在我的reserveConfirm中,我得到一个零的@car对象,这迫使我使用找到所有带id的车的地方,尽管只有一个因为id是唯一的。更糟糕的是,在我得到@car之后,我想将其状态更新为reserved,但是当我查看db时,它永远不会被更改。
传递数据的表格在这里:
<%= form_for @reservation,:url => { :action => "reserveConfirm" } do |f| %>
<%=f.label :Date%>
<%=f.date_select :pick_up_time %>
<%= f.hidden_field :car_id, :value=> @car.id %>
<%= f.hidden_field :user_id, :value=> current_user.id %>
<%= f.submit "Confirm", data: { confirm: 'Are you sure?', class: "btn btn-default" }%>
希望有人能帮助我,非常感谢!
答案 0 :(得分:2)
首先,你应该验证你是否正确地获得了@car。
我猜你可以使用'byebug'。尝试在reserveConfirm方法的开头写'byebug'。
def reserveConfirm
byebug
#your code
end
使用byebug,您可以查看您的rails服务器(在终端中)并调试您的代码。尝试写'params'来检查你收到的所有参数。你可以使用byebug写'exit'或'continue'。 (更多信息:Debugging using byebug)
如果存在params [:car_id],您的代码应该是:
@car = Car.find(params[:car_id])
@car.status = 'reserved'
if @car.update
#code
else
#code
end
检查并告诉我它是怎么回事。