按从 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 的新手,非常感谢任何帮助!
调试此类错误的方法是从错误开始逆向工作。错误发生在模板中,因为 @vendor
是 nil
。为什么?控制器有一个设置 @vendor
的 #show 方法,但它将 @vendor 设置为 current_spree_vendor
的结果,所以一定是 current_spree_vendor
返回了 nil
。所以现在你需要检查 current_spree_vendor
并找出它有时返回 nil 的原因。
您很快就会学会如何调试此类错误,并且您需要这样做,因为此类错误太普遍、太具体,无法通过互联网帮助您解决。即使互联网可以提供帮助,它也太慢了,等待答案会让您无法完成工作。
我正在尝试创建一条 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 的新手,非常感谢任何帮助!
调试此类错误的方法是从错误开始逆向工作。错误发生在模板中,因为 @vendor
是 nil
。为什么?控制器有一个设置 @vendor
的 #show 方法,但它将 @vendor 设置为 current_spree_vendor
的结果,所以一定是 current_spree_vendor
返回了 nil
。所以现在你需要检查 current_spree_vendor
并找出它有时返回 nil 的原因。
您很快就会学会如何调试此类错误,并且您需要这样做,因为此类错误太普遍、太具体,无法通过互联网帮助您解决。即使互联网可以提供帮助,它也太慢了,等待答案会让您无法完成工作。