在ruby中将数组转换为activerecord关系

时间:2015-03-18 19:18:33

标签: ruby ruby-on-rails-3

我有以下where where子句......

User.where(location_id: params[:user_place_id]).map(&:open_session)

我想将此转换为Active Record关系,以便我可以在其上调用order and pagination。

看起来我想.arr,但我不确定在这种情况下如何调用它。

修改

以下是用户模型中的关系:

  has_many :open_sessions, :class_name => "Session", :foreign_key => "assignee_id", :conditions => "status_state = #{Session::STATUS_SUBMITTED}"

2 个答案:

答案 0 :(得分:1)

你不能那样做,因为'ActiveRecord关系'实际上是对SQL查询的抽象。但是,如果可以复制与ActiveRecord查询相同的逻辑,那么您将获得所需的关系:

Session.where(status_state: Session::STATUS_SUBMITTED).joins(:user).where(users: {location_id: params[:user_place_id]})

您可以使用示波器进一步清理它。

答案 1 :(得分:0)

假设:open_session用于选择您的收藏集,您应该:open_session作为范围,并直接在where上调用:

User.where(location_id: params[:user_place_id]).open_session

这将返回AR::Relation,然后您可以对其进行分页/订购。

如果您发布open_session的代码,我们可以帮助您清理它。