簡體   English   中英

Ruby on Rails范圍

[英]Ruby on Rails Scope

我正在創建一個貼紙相冊,我需要確定重復貼紙的范圍。 我仍然不能完全理解Rails的作用域。 我如何創建一個范圍,從用戶那里獲得所有重復的標簽?

Figurinha具有colada布爾值屬性,這表示不干膠標簽是否已放置在相冊中。

Dep是玩家數據庫,Figurinha從Dep模型獲取名稱,頭像和其他信息。

repetida是我嘗試創建的方法,用於檢查figurinha是否重復。

一個figurinha當重復Figurinha有另一個記錄與同一userdep至極已經被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.

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