【问题标题】:Load Vendor Object By Name Parameter Extracted From The URL按从 URL 中提取的名称参数加载供应商对象
【发布时间】:2023-08-05 00:05:01
【问题描述】:

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

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

显示 /myapp/app/views/spree/stores/show.html.erb 其中第 2 行出现:

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

第 2 行:&lt;h2&gt;&lt;%= @vendor.name %&gt;&lt;/h2&gt;

如何通过从 url 获取名称来加载给定的Vendor?我是 Rails 新手,因此我们将不胜感激任何帮助!

【问题讨论】:

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


    【解决方案1】:

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

    您很快就会学习如何调试此类错误,而且您需要这样做,因为此类错误太常见且太具体,互联网无法帮助您解决问题。即使互联网可以提供帮助,但它太慢了,等待答案会让您无法完成工作。

    【讨论】:

    • 我刚开始使用 RoR。我已经深入检查了Multi Vendor Plugincurrent_spree_vendor helper method 并且无法弄清楚为什么它会返回nil。如何使用从 url 中提取的名称创建 Vendor object
    • @NaourassDerouichi 恐怕这个问题对我来说太宽泛了,对 SO 来说可能也太宽泛了。
    • 我希望来自 Spree 社区的熟悉该模式的人可以帮助我解决这个问题。据说该解决方案是“开源”的,但它缺乏文档和支持......为新来者接管控制权非常复杂,我真的陷入了这个特定问题。
    • @NaourassDerouichi 开源并不意味着“记录和支持”。我同意 RoR 有时会让人非常困惑,尤其是对于初学者而言。
    • @NaourassDerouichi 优秀!很好地找到了解决方案。
    最近更新 更多