复杂查找条件以返回一条记录

时间:2013-01-03 02:07:50

标签: ruby-on-rails

我正在查询我的预订模式以获取详细信息,包括has_many约会列表。

要做到这一点,我正在使用范围:

scope :current_cart, 
Booking.includes(:appointments).where(:parent_id => 1).where(:complete =>nil).order("created_at DESC").limit(1)

然后在视图中:

<%  @booking.appointments.each do |appointment| %>
  # info output
<% end %>

为了让这个工作,在控制器中,我必须这样做:

@booking = Booking.current_cart[0]

这是我担心的[0]位。我想我正在使用一种想要返回集合的方法,这意味着我必须声明我想要第一个(唯一的)记录。我如何声明一个更适合获取成员的类似范围?

2 个答案:

答案 0 :(得分:1)

尝试将“.first”添加到范围的末尾。范围只是常规的AREL查询,因此您可以像往常一样使用任何标准方法。

答案 1 :(得分:0)

向范围添加.first或[0]会产生错误:

undefined method `default_scoped?' for
谷歌搜索了这个:
undefined method `default_scoped?' while accessing scope

所以显然添加.first或[0]会阻止它可链接,所以它会出错。使用那个答案,我做了:

  scope :open_carts, 
   Booking.includes(:appointments).where(:parent_id => 1)
   .where(:complete =>nil).order("created_at DESC")

  def self.current_cart
   open_carts.first
  end

有点乱,但我更喜欢模特中的混乱,看起来并不荒谬。