1

プロダクション Rails 4.2 アプリでは、Events#show ページが呼び出されるたびに次のログ エラーが表示されます。

PG::UndefinedTable: ERROR: missing FROM-clause entry for table "actions" SELECT "merit_actions".* FROM "merit_actions" WHERE (actions.trackable_type = 'Comment' AND actions.trackable_id in (NULL))

なぜ/どのようにこのクエリが作成されているのかを理解し、問題をデバッグするのに問題があります。

このクエリは、このRailscastに大まかに基づいて、アクティビティ フィードを構築する必要があります。Event モデルには、多態的な Actionable 関連付けがあり、これを介して多くのコメントと写真が関連付けられます。

イベントモデルには次のメソッドがあります

def action_feed
  fetch_comments    = Action.where( 'actions.trackable_type = ? AND actions.trackable_id in (?)', "Comment", self.comments.map(&:id) )
  fetch_photos      = Action.where( 'actions.trackable_type = ? AND actions.trackable_id in (?)', "Photo", self.leadings.map(&:id) )

  merged_actions  = fetch_comments | fetch_photos
  sorted_actions  = merged_actions.sort_by{ |a| a[:created_at] }.reverse
  paginated_actions = Kaminari.paginate_array( sorted_actions )
end

ご覧のとおり、アクション モデルが参照さmerit_actionsれていますが、クエリで問題を引き起こしている参照はありません。

Merit gemをインストールしました

class User
  has_merit   
end

ただし、Event モデルではありません。

このクエリが を参照merit_actionsしている理由と、これをデバッグするにはどうすればよいですか? それは私には意味がありません。

4

1 に答える 1