【问题标题】:Couldn't find Order in ruby on rails在 ruby​​ on rails 中找不到 Order
【发布时间】:2019-11-27 10:01:07
【问题描述】:

我正在尝试构建一个页面来加载订单 ID,但它返回了 Couldn't find Order,你能帮忙吗?

routes.rb get '/orders/cancellation', to: 'orders#cancel'

<h1>Preview & Cancel your order here</h1>
<div class="block">

  <h1> Order <%= @order.name %></h1>

  <div id="multiple-file-preview">
    <ul id="sortable">
      <div class="clear-both"></div>
    </ul>
  </div>
</div>
def cancel
    paginate_versions PaperTrail::Version.where(order_id: order.id).order(created_at: :desc)
    remote_versions_pagination
  end
def order
    @order ||= Order.find_by!(shopify_id: params[:id])
  end

【问题讨论】:

  • 我看不到您创建取消链接的位置。你能显示生成的href吗?还要在您的数据库中显示您收到的错误和shopify_id 的示例。注意:由于这不是 FK,我将 shopify_id 重命名为 _id 后缀表示 Rails 中的 FK。
  • @pascalbetz 我试图在页面上打印出订单名称和 ID,但它一直从上面的代码中返回 Couldn't find Order ,不太清楚为什么!感谢您的帮助:)
  • 显示控制器、路由、当前 url、错误消息、数据库中的样本数据。我们应该如何帮助您处理 3 个代码 sn-ps 并且没有回溯?

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

您应该在该特定控制器操作中定义实例变量。 它会解决这个问题

def cancel
@order ||= Order.find_by!(shopify_id: params[:id]) # Whatever you need to assign.. just make sure we have @order here pints to some order record
paginate_versions PaperTrail::Version.where(order_id:order.id).order(created_at: :desc)
remote_versions_pagination
end

【讨论】:

  • 很确定错误消息不是关于缺少的实例变量,而是关于无法找到的记录。
【解决方案2】:

这可能是由于 cancellation 被视为订单 ID。您可以在显示操作中使用调试器对其进行验证。

如果是这种情况,那么您需要修改路线文件,使订单/取消出现在订单/:id之前,即显示操作,因为rails将尝试以上下方式匹配路线,并且请求将被分派到第一个匹配的路由。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多