我怎样才能 "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 变量不是线程安全的。
我只是想研究一下 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 变量不是线程安全的。