ruby-on-rails - Rails 模型 attr_accessor 属性没有保存?

标签 ruby-on-rails model 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 子句都会被评估为真(例如 @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/

相关文章:

scala - 用Scala,Apache Spark编写的编译错误保存模型

ruby-on-rails - 我应该对 Rails 弃用警告感到害怕吗?

ruby - 如何删除 ruby​​ 中的 attr_accessor

ruby 限制子类中的 attr_accessor

ruby-on-rails - ruby 1.9.2 中与 ruby​​ 1.8.7 不同的时间格式导致问题

ruby-on-rails - 使用 Paperclip 和 Rails 时谷歌云存储请求很慢

Angular 4 Reactive Form - 显示值

ruby - 在访问器方法中包装实例变量

ruby-on-rails - 如何为 rails 迁移定义 bool 字段

ruby-on-rails - 如何创建自定义电子邮件标题