Heroku にプッシュされた以前のコードでは問題はありませんでしたが、この最後のプッシュでは問題が発生しました。変更された唯一のことは、 each をループする代わりに、 each をループするようstudent
になったことuser
です。
バックグラウンド
コードはローカルでは機能しますが、Heroku では機能しません。Herokuでエラーが発生しているページは全生徒の一覧(インデックス)です。コードが行っていることは、.Users
を持つすべてをループすることprofile_type = "Student"
です。
何らかの理由で、代わりに User オブジェクトを使用する必要がある場合に、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'
アプリケーションコード
学生.rb
class Student < ActiveRecord::Base
has_one :user, :as => :profile, dependent: :destroy
...
学生_コントローラー
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
私が試したこと:
- local/dev からのすべての移行が Heroku と同期していることを再確認しました
- Heroku ファイルのクローンを作成して、同じコードベースが実行されていることを再確認しました
- コマンドを実行しまし
heroku restart
た - ダブルチェックして実行
heroku run rake db:migrate
し、すべてを確認しました - データベースをダブルチェックして、すべてのデータと列が同じであることを確認します
- 他のマシンとブラウザーをチェックしました。まだ同じ問題
確かにイライラします...助けてくれてありがとう!