我不完全明白为什么会发生这种情况,也许你们中的某些人做了......在这里。rails 3嵌套资源`新`路径正在切换
我创建了一个嵌套的资源:
resources :order do
resources :ordered_vehicles
end
我添加了一个link_to
的new
行动,并通过了order.id
像这样new_order_ordered_vehicle_path(order.id)
在页面加载很好。问题出在我按下按钮提交选择之后。他将路径从http://localhost:3000/order/3/ordered_vehicles/new
切换到http://localhost:3000/order/R076027535/ordered_vehicles
,并显示错误Couldn't find Order with id=R076027535
...去图。
误差被升高在控制器在该方法中
private
def find_order
@order = Order.find(params[:order_id])
end
哪个是before_filter
。
的new.html.haml
文件看起来像这样
= form_for [@order, @ordered_vehicle], html: { multipart: true } do |f|
= @order.number
%br= @order.id
= f.fields_for :vehicles do |car|
.... #some fields here
= car.submit "Save your choice"
这id
他找不到是@order.number
,但我不明白为什么开关。
编辑: 只是要彻底,我将添加控制器方法:
def new
@ordered_vehicle = @order.ordered_vehicles.build(params.slice(:order_id, :vehicle_id))
end
def create
binding.pry
@ordered_vehicle = @order.ordered_vehicles.build(params.slice(:order_id, :vehicle_id))
if @ordered_vehicle.save
flash[:notice] = "Save successful."
redirect_to account_path
end
end
POST请求(我希望这是一个,还是新的这一切的东西):
"action_dispatch.request.formats"=>[text/html]},
@request_method="POST", @filtered_parameters={"utf8"=>"✓", "authenticity_token"=>
"Ar4vy8pqCSpA2ch0qG0qiJXAJUbNALYxm/FbuKbdzCc=", "ordered_vehicle"=>
{"vehicles"=> {"maker_id"=>"", "model_id"=>"", "year"=>"", "body"=>"", "capacity"=>"", "id"=>"1"}},
"commit"=>"Save your choice", "action"=>"create",
"controller"=>"spree/ordered_vehicles", "order_id"=>"R076027535"}, @method="POST",
@fullpath="/order/R076027535/ordered_vehicles">
你能告诉我你的路线吗?你能告诉我从form_for [@order,@ordered_vehicle]'实际渲染的url。另外,什么是“R076027535”是ordered_vehicle的ID? – johnkoht 2013-03-17 16:22:33
我已经发布了路线(第一代码)。 “R07 ...”是“订单”表中的另一列“@ order.number”,不知道他为什么要切换。网址?按下提交按钮后,我得到的唯一一个是'http:// localhost:3000/order/R076027535/ordered_vehicles'。 – 2013-03-17 16:40:23
所以它发布到'http:// localhost:3000/order/R076027535/ordered_vehicles'。真奇怪。尝试将form_for切换到form_for [@ order.id,@ordered_vehicle]' – johnkoht 2013-03-17 16:44:15