如何在 Rails 中将静态主数据处理为模型

问题描述 投票:0回答:1

是否可以将非数据库主数据(例如

config/master_data/something.yml
中的数据)视为Rails模型(如Active Record)? 我想要具有一些功能,例如获取与指定 id 匹配的项目(就像它是一条记录一样)或检索所有记录的名称列表。我预计从不同的地方访问这些数据,比如控制器和视图。这是 yml 数据的示例:

items:
  - id: 1
    name: "Item1"
    description: "Description for Item1"
  - id: 2
    name: "Item2"
    description: "Description for Item2"
ruby-on-rails ruby activerecord
1个回答
0
投票

是的,您可以使用普通旧 Ruby 对象 (PORO) 来模拟行为。您需要创建一个复制 ActiveRecord 行为的类。

例如你可以这样做:

    class Item
      attr_accessor :id, :name, :description
    
      def initialize(attributes = {})
        @yml = YAML.load_file(Rails.root.join('config', 'master_data', 'something.yml'))
        @id = attributes['id']
        @name = attributes['name']
        @description = attributes['description']
      end
    
      def self.find(id)
        data = @yml['items'].find { |item| item['id'] == id }
        new(data) if data
      end
    end

之后您可以像这样访问它:

item = Item.find(1)

问题是为什么你不想将这些数据存储到数据库中?使用DB和ActiveRecord更容易维护和处理。

© www.soinside.com 2019 - 2024. All rights reserved.