[英]Ruby on Rails Scope
我正在創建一個貼紙相冊,我需要確定重復貼紙的范圍。 我仍然不能完全理解Rails的作用域。 我如何創建一個范圍,從用戶那里獲得所有重復的標簽?
Figurinha
具有colada
布爾值屬性,這表示不干膠標簽是否已放置在相冊中。
Dep
是玩家數據庫,Figurinha從Dep
模型獲取名稱,頭像和其他信息。
repetida
是我嘗試創建的方法,用於檢查figurinha
是否重復。
一個figurinha
當重復Figurinha
有另一個記錄與同一user
和dep
至極已經被colada
User.rb
class User < ActiveRecord::Base
has_many :figurinhas
end
Figurinha.rb
class Figurinha < ActiveRecord::Base
belongs_to :user
belongs_to :dep
def repetida
coladas = self.user.figurinhas.where(colada: true)
colodas.map{|a| a.dep}.include?(self.dep)
end
end
部門
class Dep < ActiveRecord::Base
has_attached_file :avatar
validates_attachment_content_type :avatar, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
belongs_to :partido, foreign_key: :partido, primary_key: :sigla
def avatar_from_url(url)
self.avatar = open(url)
end
end
更換
def repetida
coladas = self.user.figurinhas.where(colada: true)
colodas.map{|a| a.dep}.include?(self.dep)
end
與:
scope :repetida, ->(user_id) {where(user_id: user_id).group(:dep_id).having("count(*) > 1").having("bool_or(colada) =true") }
並致電應為:
Figurinha.repetida(User.first.id)
它試圖選擇屬於user_id
所有Figurinha
,然后將它們與dep_id
分組,因此,我們現在有了重復的Figurinha
組,但是僅當該組的計數大於1時才需要考慮重復項。
如果figurinha
每個用戶只能擁有一個真正的colada
,則可以嘗試以下操作:
scope :repetida, ->(user_id) { uniq.where(user_id: user_id, colada: false, dep_id: Figurinha.where(user_id: user_id, colada: true).pluck(:dep_id)) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.