这是我正在使用的结构:
应用程序/模型/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 子句都会被评估为真(例如 @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
宣言。
关于ruby-on-rails - Rails 模型 attr_accessor 属性没有保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905103/