Ruby on rails RubyOnRails抛出;“没有路线匹配”;论毁灭
我有两种型号buyorder和sellorder。在我的订单屏幕上,我有一个显示所有订单的部分,即买卖订单的组合 我通过命令获取所有订单的列表:Ruby on rails RubyOnRails抛出;“没有路线匹配”;论毁灭,ruby-on-rails,Ruby On Rails,我有两种型号buyorder和sellorder。在我的订单屏幕上,我有一个显示所有订单的部分,即买卖订单的组合 我通过命令获取所有订单的列表: def self.get_orders(p_uid) b = Buyorder.where(“user_id=?”,p_uid).all.to_a a = Sellorder.where(“user_id=?”,p_uid).all.to_a return a+b end 控制器执行以下操作: @orders = Order.
def self.get_orders(p_uid)
b = Buyorder.where(“user_id=?”,p_uid).all.to_a
a = Sellorder.where(“user_id=?”,p_uid).all.to_a
return a+b
end
控制器执行以下操作:
@orders = Order.get_orders(session[:user_id])
在我看来,我做到了以下几点:
<% for o in @orders %>
<tr><td> <%= link_to 'Delete', o, data: {confirm: 'Are you sure?'} , :method => :delete %></td> </tr>
<% end %>
控制器Buyorderscontroller和Sellorderscontroller都具有
def destroy
….
end
但我得到了以下错误:
No route matches {:action=>"show", :controller=>"buyorders", :id=>nil} missing required keys: [:id]
销毁方法如下所示:
def destroy
Buyorder.where("id=? and user_id=?",params[:id],session[:user_id]).destroy_all
flash[:info] = 'Order has been deleted'
redirect_to main_index_path()
end
a = Buyorder.select('price,open_quantity').where("user_id=?",p_uid).all.to_a
b = Sellorder.joins('currency').select('id,currency1_id,currency2_id,ostatus,price,open_quantity').where("user_id=?",p_uid).all.to_a
和rake:routes显示:
buyorders GET /buyorders(.:format) buyorders#index
POST /buyorders(.:format) buyorders#create
new_buyorder GET /buyorders/new(.:format) buyorders#new
edit_buyorder GET /buyorders/:id/edit(.:format) buyorders#edit
buyorder GET /buyorders/:id(.:format) buyorders#show
PATCH /buyorders/:id(.:format) buyorders#update
PUT /buyorders/:id(.:format) buyorders#update
DELETE /buyorders/:id(.:format) buyorders#destroy
为什么?
PS:是谁在贬低所有答案和问题?这是多余的。如果你认为这个问题很愚蠢,那么提供一个有效的答案,我将非常乐意接受降级
解决方案:
self.get_orders的原始代码如下所示:
def destroy
Buyorder.where("id=? and user_id=?",params[:id],session[:user_id]).destroy_all
flash[:info] = 'Order has been deleted'
redirect_to main_index_path()
end
a = Buyorder.select('price,open_quantity').where("user_id=?",p_uid).all.to_a
b = Sellorder.joins('currency').select('id,currency1_id,currency2_id,ostatus,price,open_quantity').where("user_id=?",p_uid).all.to_a
一旦我使这两行返回相同的结果
a = Buyorder.joins('currency').select('id,currency1_id,currency2_id,ostatus,price,open_quantity').where("user_id=?",p_uid).all.to_a
b = Sellorder.joins('currency').select('id,currency1_id,currency2_id,ostatus,price,open_quantity').where("user_id=?",p_uid).all.to_a
错误消失了
换句话说,如果组合两个数组,请确保它们返回的列相同。将视图中的
循环更新为
<tr><td> <%= link_to 'Delete', o, :method => :delete, data: {confirm: 'Are you sure?'} %></td> </tr>
:删除,数据:{确认:'确定吗?}%>
Url帮助程序似乎无法使用刚刚构建的数组元素构建路由
请尝试以下方法:
if o.is_a?(Buyorder)
= link_to 'Delete', buyorder_path(id: o.id), data: {confirm: 'Are you sure?'} , :method => :delete
else
= link_to 'Delete', sellorder_path(id: o.id), data: {confirm: 'Are you sure?'} , :method => :delete
end
你的destroy
方法中到底有什么?我已经粘贴了destroy方法的内容。@Kumala在你看来是完整的代码吗?如果没有,请在视图中创建另一个指向show
操作的链接。如果您共享完整的查看代码和包含错误详细信息的服务器日志,这将非常有帮助。这看起来应该可以工作,您是否100%确定抛出错误的那一行?使用实际代码,我认为这可以更快地解决。看到这一点,很明显你的订单关系没有id。还有,为什么在.where之后出现了.all?这是我已经有的,更改:方法和数据:的顺序不会修复错误。您可以发布您现在在网页上获得的链接的最终html吗?我无法发布html,因为该页面由于错误而无法呈现。我找到了解决方案,并将其添加到问题中供大家参考。看起来应该可以,除了它应该是buyorder\u路径(o)而不是order\u路径(id:o.id)。不,不起作用。顺便说一句,请注意数组由buyorders和sellorders组成,这是一个不同类的数组。更新了我的答案,它是否解决了视图加载时的错误?我找到了解决方案,并将其添加到问题中供大家参考。