You need to enable JavaScript to run this app. Ruby项目求助:无法从Suggestion类存储数组获取已保存实例
优惠活动
大模型
产品
解决方案
定价
更多

Ruby项目求助:无法从Suggestion类存储数组获取已保存实例

现有实现的有效基础

你目前的代码已经搭好了存储所有类实例的核心框架:

  • 定义了类级别的类变量@@all,专门用于存储Suggestion类的所有实例引用
  • 实现了类方法self.all,可以直接返回存储全部实例的数组
  • 在初始化方法initialize里,把每次新建的实例自动追加到@@all数组中,这部分逻辑完全正确

现存问题与调整方案

当前无法正常调取所有已创建实例的核心原因:

  • list_events方法内的map没有绑定实际处理逻辑,后续的属性映射块被注释,空的map调用和直接返回原数组没有区别
  • 当前的initialize方法只接收type和participants两个参数,activity、price等其他属性的赋值逻辑全被注释,即使遍历到实例也无法读取对应属性值

可直接运行的调整后代码

class Suggestion
    attr_accessor :type, :participants
    attr_reader :activity, :price, :link, :key, :accessibility

    @@all = []

    def initialize(type, participants, activity:, price:, link:, key:, accessibility:)
        @type = type
        @participants = participants
        @activity = activity
        @price = price
        @key = key
        @link = link
        @accessibility = accessibility
        @@all << self
    end

    def self.all
        @@all
    end

    def list_events
        Suggestion.all.map do |event|
            {
                activity: event.activity,
                type: event.type,
                participants: event.participants,
                price: event.price,
                link: event.link,
                key: event.key,
                accessibility: event.accessibility
            }
        end
    end
end

实际调用方式

每次新建Suggestion实例时按定义传入对应参数,直接调用类的all方法或者实例的list_events方法,就能获取全部已创建的实例数据,示例:

# 新建测试实例
Suggestion.new("户外", 2, activity: "短途徒步", price: 0, link: "本地路径", key: "outdoor_001", accessibility: 0.8)
Suggestion.new("室内", 4, activity: "桌面桌游", price: 30, link: "本地路径", key: "indoor_001", accessibility: 0.5)

# 调取所有原始实例
pp Suggestion.all
# 调取结构化的事件列表
pp Suggestion.new("测试类型", 1).list_events

注意:目前的实例存储是存在内存里的,程序重启后所有存到@@all里的实例都会清空,如果需要持久化存储需要搭配数据库或者本地文件读写逻辑。


内容的提问来源于stack exchange,提问作者Pokedexrockett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 19:36:07