我怎样才能 "initialize" 实例变量?

How can I "initialize" instance variable?

我只是想研究一下 Rails。

每次通过postman发送get请求,都会调用initialize方法,所以无法维护@data数组,因为@data在每次请求时都会初始化。 有什么方法可以一次性初始化@data,让create,update,destroy方法正常工作吗?

class BooksController < ApplicationController
    skip_before_action :verify_authenticity_token

    def initialize
        super
        @data = [
            { title: "Harry Potter", author: "J.K Rowling" },
            { title: "Name of the wind", author: "Patrick Rothfuss" }
        ]
    end

    def index
        render json: @data
    end

    def create
        @data.push(params[:book])
        render json: @data
    end
end

因为我还不想使用任何数据库,并且知道每个请求都会创建一个新的 BooksController 实例。 要使此代码正常工作,可以进行以下更改。

class BooksController < ApplicationController
    skip_before_action :verify_authenticity_token

    @@data = [
        { title: "Harry Potter", author: "J.K Rowling" },
        { title: "Name of the wind", author: "Patrick Rothfuss" }
    ]

    def index
        render json: @@data
    end

    def create
        @@data.push(params[:book])
        render json: @@data
    end
end

如果您想在请求之间保留任何内容,您需要将其存储在某个地方:

  • 数据库
  • 基于内存的存储(Redis、Memcached)
  • 文件系统

您还可以在客户端和服务器之间来回传递状态,而无需实际存储它:

  • HTTP cookies
  • 查询字符串参数

使用 class 变量并不能真正解决任何问题。只要 class 保存在内存中,它就会保存变量。每次 class 重新加载时,它都会被重置。

多线程是这里的另一个大问题,因为 Rails 服务器通常是多线程的,class 变量不是线程安全的。