Rails模型attr_accessor属性不保存?

这是我正在使用的结构:

应用程序/模型/ model.rb

class Model < ActiveRecord::Base attr_accessor :some_var end 

应用程序/模型/ model_controller.rb

 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 

每当我运行此代码(例如show方法)时,if子句被评估为true(例如@ model.some_var == nil)。 我该如何解决这个问题? 我对attr_accessor的工作方式有什么不妥吗?

attr_accessor是一个内置的Ruby宏,它将为一个对象的实例变量定义一个setter和一个getter,并且与ActiveRecord实例的数据库列没有任何关系。 例如:

 class Animal attr_accessor :legs end a = Animal.new a.legs = 4 a.legs #=> 4 

如果要将其保存到数据库,则需要在迁移中定义列。 然后ActiveRecord将自动创建访问器方法,您可以(应该)删除您的attr_accessor声明。