从URL提取的按名称加载供应商对象参数

时间:2019-06-26 06:25:30

标签: ruby-on-rails oop model-view-controller spree

我正在尝试创建一条使用Vendor链接到每个Spree Commerce的商店页面的路线。该页面应列出详细信息(名称,关于我们的信息等)以及给定供应商的产品。

https://example.com/stores/vendor-one

我的 routes.rb 配置:

Spree::Core::Engine.routes.draw do
    resources :stores
end

我的 stores_controller 控制器:

module Spree
    class StoresController < Spree::StoreController  
      require 'vendor'
      def show
        @vendor = current_spree_vendor
      end     
    end
end

我的 show.html.erb 模板:

<h2><%= @vendor.name %></h2>
<p><%= @vendor.about_us %></p>

我得到的错误:

  

Spree :: Stores#single中的NoMethodError

     

在第2行出现的位置显示/myapp/app/views/spree/stores/show.html.erb:

     

nil:NilClass的未定义方法“名称”

     

第2行:<h2><%= @vendor.name %></h2>

如何通过从URL获取名称来加载给定的Vendor?我是Rails的新手,所以我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

调试此类错误的方法是从错误中倒退。模板中发生错误,因为@vendornil。为什么?控制器具有#show方法,该方法设置@vendor,但它将@vendor设置为current_spree_vendor的结果,因此必须是current_spree_vendor返回了nil。因此,现在您需要检查current_spree_vendor并找出为什么有时返回nil的原因。

您很快将学习如何调试此类错误,并且由于这些错误太常见,太具体而无法成为Internet可以帮助您的东西,因此您将需要进行调试。即使互联网可以提供帮助,它也太慢了,等待答案可以阻止您完成工作。