无法将值分配给ActiveModel属性(rails 4.2)

时间:2018-08-17 13:04:43

标签: ruby-on-rails ruby-on-rails-4

我在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上可以正常工作

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将更新单个属性并保存记录,而无需执行正常的验证过程