为什么不将属性传递给Model.new工作?

时间:2013-03-07 01:24:39

标签: ruby activerecord

我有一个具有以下属性的模型WordpressBlogger :(请注意这些列的特定顺序:screen_name是在生成表后添加的)

id, rss_feed_id, blog_url, year_founded, created_at, updated_at, screen_name, latest_entry

当我在控制台中执行blogger = WordpressBlogger.new(:screen_name => "test")时,它似乎没有返回设置了screen_name的模型。

相反,我得到了这个:

=> #<WordpressBlogger id: nil, rss_feed_id: nil, blog_url: nil, year_founded: nil, created_at: nil, updated_at: nil, screen_name: nil, latest_entry: nil> 

然而,当我在控制台中执行blogger = WordpressBlogger.new(:year_founded => 2011)时,它会返回一个具有此属性集的模型。

=> #<WordpressBlogger id: nil, rss_feed_id: nil, blog_url: nil, year_founded: 2011, created_at: nil, updated_at: nil, screen_name: nil, latest_entry: nil> 

这是一个奇怪的Rails错误,如果数据库中的列是AFTER Rails创建的属性,例如created_atupdated_at,那么该属性不会被设置?

更新:我忘了将它添加到attr_accessible。

3 个答案:

答案 0 :(得分:1)

最有可能的是,WordpressBlogger类中有attr_accessible的引用。您可能需要将year_founded添加到允许批量分配的attr_accessible元素列表中。

答案 1 :(得分:0)

实际上并没有创建模型。请注意,没有设置id。要创建它,您必须

blogger = WordpressBlogger.new(:screen_name => "test")
blogger.save

blogger = WordpressBlogger.create(:screen_name => "test")

这是你的模特吗?

attr_accessor :screen_name, :year_founded

或者您可能需要exit并再次运行rails c

答案 2 :(得分:0)

您最有可能在运行迁移时运行控制台。快速reload!或重新启动控制台应该可以显示所有列。