0

我正在查询我的预订模型以获取详细信息,包括 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] 位。我想我正在使用一种想要返回集合的方法,这意味着我必须声明我想要第一个(唯一的)记录。如何声明更适合获取成员的类似范围?

4

2 回答 2

1

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

于 2013-01-03T02:15:48.347 回答
0

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

undefined method `default_scoped?' for

谷歌搜索给出了这个:
未定义的方法`default_scoped?在访问范围时

所以显然添加 .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

有点乱,但我更喜欢我的模型乱七八糟,而且看起来并不荒谬。

于 2013-01-03T02:26:25.883 回答