我没有遇到以前推送到Heroku的代码的麻烦,但最后一次推动已经搞砸了。唯一改变的不是循环遍历每个student
,而是循环遍历每个user
。
代码在本地工作,但不在Heroku上。在Heroku上引发错误的页面是所有学生的列表(索引)。代码正在做的是循环遍历Users
的所有profile_type = "Student"
。
出于某种原因,它应该尝试访问Student对象上的多态关联(profile),而不应该使用User对象。
从Heroku登录
ActionView::Template::Error (undefined method `profile' for #<Student:0x007f80c5552330>):
35: <tbody>
36: <% @students.each do |user| %>
37: <tr>
38: <td><%= link_to user.profile.ivywise_id, student_path(user.profile_id) %></td>
39: <td><%= link_to user.first_name.camelize, student_path(user.profile_id) %></td>
40: <td><%= link_to user.last_name.camelize, student_path(user.profile_id) %></td>
41: <td><%= user.email %></td>
app/views/students/index.html.erb:38:in `block in_app_views_students_index_html_erb__3704269538007702833_70095521176320'
app/views/students/index.html.erb:36:in `_app_views_students_index_html_erb__3704269538007702833_70095521176320'
student.rb
class Student < ActiveRecord::Base
has_one :user, :as => :profile, dependent: :destroy
...
students_controller
def index
@students = User.where(profile_type: "Student").order("last_name")
end
index.html.erb for students
<% @students.each do |user| %>
<tr>
<td><%= link_to user.profile.ivywise_id, student_path(user.profile_id) %></td>
<td><%= link_to user.first_name.camelize, student_path(user.profile_id) %></td>
<td><%= link_to user.last_name.camelize, student_path(user.profile_id) %></td>
<td><%= user.email %></td>
<td></td>
<td>
<%= link_to "Edit", edit_student_path(user.profile_id), class: "btn btn-default btn-small" if can? :edit, Student %>
</td>
</tr>
<% end %>
user.rb
class User < ActiveRecord::Base
belongs_to :profile, :polymorphic => true
我尝试了什么:
heroku restart
命令heroku run rake db:migrate
以确保所有内容绝对令人沮丧......感谢您的帮助!
答案 0 :(得分:2)
感谢Leo Correa的建议,我在生产模式下启动了rails服务器并能够重现错误。 (我使用RAILS_ENV=production rails s
在生产模式下本地启动服务器。)
我将问题缩小到config.eager_load
。它最初设置为true
,但将其更改为config.eager_load = false
解决了问题。
仍然不确定为什么这个问题一开始就存在,但现在已经解决了!
答案 1 :(得分:1)
我遇到了同样的问题,并将config.eager_load
设置为true
修复了它。然而,这不是生产中的推荐设置,所以我试图找出真正的问题。
我终于意识到这是因为其他一些模型类设置错误(它仍处于开发阶段),即使它与错误模型完全无关。当config.eager_load
选项设置为true
时,由于优化原因,它会导致Rails在启动时加载所有类。如果某些模型类不正确,那么这会导致事情搞砸,关系可能会变得怪异。
一旦我删除了错误/不完整的模型类,一切都开始重复了。