我不明白为什么会发生这种情况,也许有人会这样做......在这里。
我创建了一个嵌套资源:
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
... go figure。
此方法中控制器中出现错误
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">
答案 0 :(得分:0)
根据要求;)
嗯,事实证明Spree
是我目前正在调整的问题(我知道我没有明确提及它,但不想发布太多信息)。
底线:
在Order
模型中,方法to_param
被覆盖,以将number
列传递到params
。没有再覆盖它,只是把它留在那里并适应。在我写的find_order
方法中:
def find_order
@order = Order.find_by_number(params[:order_id])
end
此外,我已将订单编号存储在表格中,我认为存在问题,但不能明确记住。无论如何,谢谢你的帮助。
P.S。对不起这个烂摊子