Rails模型attr_accessor属性不保存?
Rails模型attr_accessor属性不保存?
这是我正在处理的结构:\napp/models/model.rb\n
class Model < ActiveRecord::Base attr_accessor :some_var end
\napp/models/model_controller.rb\n
class ModelsController < ApplicationController def show @model = Model.find(params[:id]) @other_var if @model.some_var.nil? @model.some_var = "some value" @other_var = "some value" else @other_var = @model.some_var end end end
\n每当我运行这段代码(例如show方法),if子句的结果为真(例如@model.some_var == nil)。我该如何解决这个问题?我的attr_accessor的使用有什么问题吗?
Rails模型attr_accessor
属性不保存的原因是,attr_accessor
是Ruby中的一个内置宏,用于定义一个对象的实例变量的setter和getter,与ActiveRecord实例的数据库列没有任何关系。如果想要将其保存到数据库中,需要在迁移中定义一个列。然后ActiveRecord会自动创建访问器方法,这时可以(应该)删除attr_accessor
声明。
解决方法是在迁移中定义一个列,然后使用serialize
来保存哈希类型的属性。另外,如果使用Postgres数据库,还可以使用jsonb
类型的列来存储哈希。
如果Animal
模型有多个Category
,则Category
表如何访问Animal
的访问器属性,可以通过在Category
模型中使用belongs_to
关联声明来实现。这样,Category
模型可以通过关联的animal
对象来访问Animal
的访问器属性。
以上是关于Rails模型attr_accessor
属性不保存的原因和解决方法的简要介绍。希望对你有帮助!