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 关联,通过它关联了许多 Comments 和 Photos。

在事件模型中是以下方法

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

如您所见,Action 模型被引用,但没有引用merit_actions导致查询中的问题。

我确实安装了Merit gem

class User
  has_merit   
end

但不在事件模型上。

为什么这个查询引用merit_actions,我该如何调试呢?这对我来说没有意义。

4

1 回答 1

0

您的Action模型与 Merit's 冲突,这令人惊讶,因为 Merit's 是命名空间的。

尝试在调用中指定根命名空间,例如::Action.

如果这可以得到修复,我很乐意发布错误修复。

于 2015-05-09T04:36:20.960 回答