为什么`merit_actions`出现在这个查询中而没有被指定?

时间:2015-05-07 23:38:33

标签: ruby-on-rails merit-gem

在生产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

正如您所看到的,引用了Action模型,但没有引用导致查询中出现问题的merit_actions

我确实安装了Merit gem

class User
  has_merit   
end

但不在事件模型上。

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

1 个答案:

答案 0 :(得分:0)

你的Action模特与Merit的冲突,这是令人惊讶的,因为Merit被命名为。

尝试在您的通话中指定根名称空间,例如::Action

如果可以修复这个问题,我很乐意发布错误修正。