2013-05-18 24 views
1
之間

我的代碼是這樣的查詢兩個表使用Ruby

contact = UserContact.find(:all,:select=>"distinct app_id,number",:conditions=>"number ='1234'") 

arr=[] 
contact.each do|c| 
arr << c.app_id 
end 
name=User.find(:all,:conditions=>"id in(#{arr.join(',')}") 

我需要兩個多的時間我能做到這一點使用加入

感謝

回答

0

你應該做的水木清華這樣

User.find(:all, :joins => :user_contacts, :conditions => "user_contacts.number = '1234'") 

用戶應該有關聯。在user.rb應該是:

has_many :user_contacts, :foreign_key => :app_id 

但它是不好的風格名稱列「APP_ID」它應該是「USER_ID」(約定優於配置)。重命名它。重命名後,您可以刪除「::foreign_key =>:app_id」

0

不幸的是,您不能在同一個活動記錄查詢中執行「包含」和「選擇」。所以這是行不通的...

contacts = UserContact.includes(:users).where("number = ?", '1234').select(:app_id, :number).uniq 

但是。

FIRST:APP_ID看起來像它應該叫 「user_ID的」

第二:您正在使用什麼版本的Rails的?如果您使用rails 3.2,則可能需要使用「pluck」方法。因此

user_ids = UserContact.where("number = ?", '1234').pluck(:app_id).uniq 
users = User.where(:id => user_ids) 

第三:在紅寶石的而不是做這樣的:

arr=[] 
contact.each do|c| 
    arr << c.app_id 
end 

做到這一點:

arr = contact.inject([]) {|arr, c| arr << c.app_id} 

第四:正如我在所有的例子你的語法主要是Rails的2.我以爲你正在使用導軌2?如果是這樣,你可能需要升級。

第五:如果返回多個對象,則使用複數變量名稱。因此

contact = UserContact..... 
name=User..... 

應該

contacts = UserContact.find..... 
users = User.find..... 

LAST:

User.joins(:user_contacts).where("user_contacts.number = ?", '1234') 

可能是很好的