Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyOnRails抛出;“没有路线匹配”;论毁灭_Ruby On Rails - Fatal编程技术网

Ruby on rails RubyOnRails抛出;“没有路线匹配”;论毁灭

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.

我有两种型号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.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组成,这是一个不同类的数组。更新了我的答案,它是否解决了视图加载时的错误?我找到了解决方案,并将其添加到问题中供大家参考。