簡體   English   中英

具有活動記錄的Rails排除查詢-Rails 3.1

[英]Rails exclusion query with active record — Rails 3.1

在這種情況下,我將如何使用活動記錄:

我有兩個表:Users,Admins

管理員也可以是用戶,因此表中有一個user_id。

我想選擇所有未在admins表中設置user_id的用戶

注意:這只是一個示例情況。 如果是真實情況,那么我當然不會為用戶和管理員提供兩個不同的表。

編輯:同樣,我知道這樣做的語義是可怕的數據庫設計-但這只是一個假案例。

您可以使用:conditions包含NOT IN

User.find(:all, :conditions => ['user_id not in (?)', @admins.map( &:id )])

或者,您可以將其編碼到用戶的scope (在Rails 3.x之前也稱為named_scope ):

class User < ActiveRecord::Base
  scope :not_admin, lambda { |admins| { :conditions => ['user_id not in (?)', admins.select( &:id ).join( ',' )] }
end

並將其用作:

User.not_admin( @admins )

或者為了不依賴於傳遞@admins變量,可以使用joins

class User < ActiveRecord::Base
  scope :not_admin, joins( :admin ).where( :admins => { :user_id => nil } )
end

暫無
暫無

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

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