簡體   English   中英

范圍,lambda和rails 3

[英]Scopes, lambda and rails 3

今晚在軌道3中玩瞄准鏡,試圖讓我的頭圍繞lambda做什么?

我在這個例子中想要實現的是從我的國家模型中獲取與我的食譜模型相關聯的國家名稱(:名稱)列表。 食譜屬於國家,國家有很多食譜。

我想按照它們出現在食譜中的次數來訂購食譜,從最高的開始。

所以我在我的食譜模型中嘗試這個(或者我應該在國家模型中做到這一點?但是那不會起作用,因為我的國家模型預先填充了世界上每個國家的1個實例)

scope :top_countries, lambda { joins(:countries).merge(Country.name).order("name DESC") }

但是我收到此錯誤消息

undefined method `default_scoped?' for "Country":String

我的控制器

@toprankingcountry = Recipe.top_countries

很明顯,我的理解不是我的想法,並會感謝一些指示/幫助

謝謝

我認為問題出在merge(Country.name)部分。 join(:countries)返回ActiveRecord :: Relation實例。 它的merge方法需要一個參數,它是ActievRecord :: Relation的另一個實例,而你合並字符串Country.name。

一般來說,有效地獲得一個頂級國家名單意味着通過一些額外條件獲得國家名單。 所以我將這個邏輯放入Country模型中。

class Country
  has_many :recipes

  def self.top_countries
    joins(:recipes).
      select('countries.*, count(*) AS recipes_count').
      group('countries.id').
      order('recipes_count DESC')
  end
end

此外,如果您使用的RDBMS無法自行計算相關行(如PostgreSQL <9.1),則必須手動列出group by子句中的所有列。

從我的國家/地區模型中獲取與我的食譜模型相關聯的國家/地區名稱(:名稱)列表(實例)

我認為實現你所描述的是不可能的,因為一個國家有很多食譜,反之亦然

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM