我在Rails 4.2中创建了一个简单的用户模型。但是我无法在Rails控制台中分配任何属性值
[1] "Bengaluru" "Bengaluru" "Andaman" "Andaman" "South 24 Parganas"
如您所见,尽管设置了名称,该值仍未更改。
这是模型文件
2.1.5 :001 > u = User.new
=> #<User id: nil, name: nil, email: nil, auth_token: nil, created_at: nil, updated_at: nil, enabled: true>
2.1.5 :002 > u.name = 'sample'
=> "sample"
2.1.5 :003 > u.changed
=> []
2.1.5 :004 > u
=> #<User id: nil, name: nil, email: nil, auth_token: nil, created_at: nil, updated_at: nil, enabled: true>
我知道在Rails 3.2上可以正常工作
答案 0 :(得分:2)
ActiveRecord的最大“卖点”之一是,它会基于数据库模式在模型中自动创建setter和getter。
这些不仅是getProperty()
(是普通的Ruby)创建的普通访问器,它们还将值转换为正确的类型并进行脏跟踪。
当您使用PropertiesTesting
时,您正在生成的setter和getter会掩盖ActiveRecord创建的内容-这意味着AR将不会跟踪更改或保留属性。
这是您真正想要的:
attr_accessor
仅当需要非持久性(“虚拟”)属性的设置方法和获取方法时,才在模型中使用attr_accessor
。
答案 1 :(得分:0)
您需要在分配新值后保存记录。您可以通过在对象上调用update_attribute!
或save!
来实现。就您而言:
u.name = "sample"
u.save!
或
u.update_attribute("name", "sample")
请注意,update_attribute
将更新单个属性并保存记录,而无需执行正常的验证过程