::的ActionView ::模板错误(未定义的方法...)在本地工作,但不是在Heroku(Ac

2019-10-18 15:06发布

我没有麻烦在前面的代码推到Heroku的,但是这最后推已经搞砸了。 已更改的唯一事情是不是通过每个循环student ,它现在通过每个循环user

背景

代码工作在本地,而不是在Heroku。 这是提高在Heroku上的错误页面是所有学生的名单(指数)。 什么代码正在做的是通过所有的循环Users有一个profile_type = "Student"

出于某种原因,该公司试图以一个Student对象的访问态关联(配置文件),当用户对象应改为使用。

从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学生

  <% @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

我曾尝试:

  • 双重检查,从本地的/ dev所有迁移都与Heroku的同步
  • Heroku的文件克隆仔细检查,他们正在运行的同一个代码库
  • heroku restart命令
  • 双重检查就跑heroku run rake db:migrate ,以确保一切
  • 双重检查数据库,以确保所有的数据和列是相同的
  • 我检查的其他机器和浏览器; 还是同样的问题

无疑地挫折......感谢您的帮助!

Answer 1:

由于狮子座科雷亚的建议下,我开始在生产模式下轨服务器,并能够重现错误。 (I使用的RAILS_ENV=production rails s在本地启动服务器在生产模式。)

我缩小了问题降到config.eager_load 。 它最初被设定为true ,但改变它config.eager_load = false固定的问题。

不过不知道为什么这个问题摆在首位坚持,但现在已经修好了!



Answer 2:

我有同样的问题,并设置config.eager_loadtrue固定它。 然而,这不是在生产中推荐的设置,所以我试图找出什么是真正的问题。

我终于明白了,这是因为被错误地设置了(这是仍在开发中)一些其他的模型类的, 即使它有绝对无关的示数模型。 当config.eager_load选项设置为true它会导致Rails的启动进行优化的理由来加载所有类。 如果某些模型类是不正确的,那么这将导致事情搞砸和关系可能会变得怪异。

当我删除了错误/不完整的模型类,一切开始重新工作。



文章来源: ActionView::Template::Error (undefined method…) Works locally, but not on Heroku