Rails模型attr_accessor属性不保存?

11 浏览
0 Comments

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的使用有什么问题吗?

0
0 Comments

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属性不保存的原因和解决方法的简要介绍。希望对你有帮助!

0