未保存到数据库的Rails简单模型属性
问题描述:
我正在开发一个从Steam API读取数据的小型Rails 3应用程序。我所看到的是,我创建的任何ActiveRecord模型的模型属性都不会保存到数据库,也不会输出,如果我debug
他们。未保存到数据库的Rails简单模型属性
这里我的样品模型
class NonPlayableApp < ActiveRecord::Base
attr_accessor :name, :steam_id
attr_accessible :name, :steam_id
end
随着迁移文件之中:
class CreateNonPlayableApps < ActiveRecord::Migration
def change
create_table :non_playable_apps do |t|
t.string :name
t.string :steam_id
t.timestamps
end
end
end
下面是与Rails控制台几次试验,我得到相同的结果,当我尝试他们在一个控制器和inspect
或yaml
模型:
irb(main):001:0> temp = NonPlayableApp.new(steam_id: 33333, name: "Testing")
=> #<NonPlayableApp id: nil, name: nil, steam_id: nil, created_at: nil, updated_at: nil>
irb(main):002:0> temp.steam_id
=> 33333
irb(main):003:0> temp.name
=> "Testing"
irb(main):004:0> temp.save
(0.1ms) begin transaction
SQL (4.0ms) INSERT INTO "non_playable_apps" ("created_at", "name", "steam_id", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Fri, 26 Feb 2016 19:40:37 UTC +00:00], ["name", nil], ["steam_id", nil], ["updated_at", Fri, 26 Feb 2016 19:40:37 UTC +00:00]]
(8.8ms) commit transaction
=> true
irb(main):005:0> temp.steam_id
=> 33333
irb(main):006:0> temp
=> #<NonPlayableApp id: 64, name: nil, steam_id: nil, created_at: "2016-02-26 19:40:37", updated_at: "2016-02-26 19:40:37">
irb(main):007:0> temp2 = NonPlayableApp.first
NonPlayableApp Load (1.6ms) SELECT "non_playable_apps".* FROM "non_playable_apps" LIMIT 1
=> #<NonPlayableApp id: 64, name: nil, steam_id: nil, created_at: "2016-02-26 19:40:37", updated_at: "2016-02-26 19:40:37">
irb(main):008:0> temp2.steam_id
=> nil
irb(main):009:0> temp2.name
=> nil
我错过了什么?
答
attr_accessor :name, :steam_id
重写Rails为该属性自动生成的setter和getter方法。
只需从模型中删除attr_accessor :name, :steam_id
行。
This Works,thanks。我猜Rails从表模式中获取每个模型的属性列表? – Technoh
没错,Rails为数据库表中的每个列生成getter和setter方法。 – spickermann
为什么现在开发应用程序时使用Rails 3? Rails 5测试版已经发布。 –