我正在查询我的预订模式以获取详细信息,包括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]位。我想我正在使用一种想要返回集合的方法,这意味着我必须声明我想要第一个(唯一的)记录。我如何声明一个更适合获取成员的类似范围?
答案 0 :(得分:1)
尝试将“.first”添加到范围的末尾。范围只是常规的AREL查询,因此您可以像往常一样使用任何标准方法。
答案 1 :(得分:0)
向范围添加.first或[0]会产生错误:
undefined method `default_scoped?' for
谷歌搜索了这个:所以显然添加.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
有点乱,但我更喜欢模特中的混乱,看起来并不荒谬。