这个 Ruby on Rails 问题有点令人烦恼,因为代码在本地运行良好,但当我将其推送到我的实时服务器时却不行。
我已经使用迁移将一些 int 列添加到表中,并有一些复选框来确定某个状态的项目是否显示在某个页面上,例如:
status\page myitems featureditems saleitems
status1 X x x
status2 x x
这在开发环境中本地运行良好,但是当我将代码推送到我的实时服务器时,“添加新功能”页面无法加载并出现以下错误:
Started GET "/admin/statuses/new" for 86.159.115.236 at 2012-08-19 13:39:12 -0400
Processing by Admin::StatusesController#new as HTML
Rendered shared/_validationerror.html.erb (0.0ms)
Rendered admin/statuses/_form.html.erb (2.1ms)
Rendered admin/statuses/new.html.erb within layouts/application (2.2ms)
Completed 500 Internal Server Error in 4ms
ActionView::Template::Error (undefined method `show_my_items' for #<Status:0xb6c1690>):
20: </tr>
21:
22: <tr>
23: <td align="center"><%= f.check_box :show_my_items %></td>
24: <td align="center"><%= f.check_box :show_latest_items %></td>
25: <td align="center"><%= f.check_box :show_featured_items %></td>
26: <td align="center"><%= f.check_box :show_search_results %></td>
app/views/admin/statuses/_form.html.erb:23:in `block in
_app_views_admin_statuses__form_html_erb__566719799_79558060'
app/views/admin/statuses/_form.html.erb:1:in
`_app_views_admin_statuses__form_html_erb__566719799_79558060'
app/views/admin/statuses/new.html.erb:7:in
`_app_views_admin_statuses_new_html_erb__880262090_94647510'
app/controllers/admin/statuses_controller.rb:31:in `new'
在这种情况下,“show_my_items”是附加到状态的字段之一(由 page1 表示)。
此外,在现场,我可以使用复选框编辑状态(但它是 int 数据类型......),但在现场,虽然我可以查看编辑页面并在没有错误的情况下提交,但它实际上并没有更新该字段。
所以这些列存在于数据库中,代码与我在现场的代码相同,但错误只发生在现场服务器上。两者上的 Rails 版本相同(3.1.0.rc8),ruby 版本略有不同(本地:1.9.2p320,实时:1.9.3p194)。
不知道发生了什么...