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

Load Vendor Object By Name Parameter Extracted From The URL

我正在尝试创建一条 link 到每个 Vendor using 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>

我遇到的错误:

NoMethodError in Spree::Stores#single

Showing /myapp/app/views/spree/stores/show.html.erb where line #2 raised:

undefined method `name' for nil:NilClass

Line # 2 : <h2><%= @vendor.name %></h2>

如何通过从 url 获取名称来加载给定的 Vendor ?我是 Rails 的新手,非常感谢任何帮助!

调试此类错误的方法是从错误开始逆向工作。错误发生在模板中,因为 @vendornil。为什么?控制器有一个设置 @vendor 的 #show 方法,但它将 @vendor 设置为 current_spree_vendor 的结果,所以一定是 current_spree_vendor 返回了 nil。所以现在你需要检查 current_spree_vendor 并找出它有时返回 nil 的原因。

您很快就会学会如何调试此类错误,并且您需要这样做,因为此类错误太普遍、太具体,​​无法通过互联网帮助您解决。即使互联网可以提供帮助,它也太慢了,等待答案会让您无法完成工作。