rails3生成中现有属性的未定义方法错误

时间:2014-07-21 09:25:25

标签: ruby-on-rails-3.2 postgresql-9.3 dev-to-production

在开发中运行时,不会遇到以下错误。

在模型中添加新属性后,在部署到登台服务器时,模型的页面正在生成

ActionView::Template::Error (undefined method `[...]' for #<Optionrate:)x)))... 

它引用当前schema.rb文件中存在的属性,恰好在attr_accessible中列出。在_form调用属性和视图中引发错误,其中通过if子句调用属性(布尔值),例如:

<% if @optionrate.auto_price %>

我甚至可以通过控制台使用新属性

Optionrate.all.each { |n| n.update_attribute(:auto_price, true)}

在属性的名称中有许多具有相同前缀或可能有两个下划线的布尔值,我更改了名称,重新运行了所有内容并获得了相同的行为!

更新了两个模型后,另一个模型会生成相同的未定义方法错误。因此,由于结构的变化,错误显然正在发生。

迁移所遵循的步骤是:

pg_dump the existing DB
rake db:migrate VERSION=0
deploy changes
rake db:migrate
psql load existing data

**更新**
事实证明,环境存在差异。首先,我在花园小径上;需要调用生产环境的控制台     RAILS_ENV =生产包exec rails c

然后事实上,这些属性在控制台查询中不存在。

无法理解为什么它在开发中而不是在生产模式下工作。

1 个答案:

答案 0 :(得分:0)

如果有人遇到此问题......

控制台rake命令不一定知道要执行的环境。因此,我实际上并没有修改生产数据(作为一个大文件,我没有阅读所有的postgresql消息......

pg_dump the existing DB
RAILS_ENV=production bundle exec rake db:migrate VERSION=0
deploy changes
RAILS_ENV=production bundle exec rake db:migrate
psql load existing data

指定环境......