2017-02-28 196 views
0

這是我的問題。我可以使用單個表中的數據填充列表。但我需要讀取一張表,並根據這些值從另一個表中獲取數據。如何使用列表中的數據填充下拉表格?

有4個表:

  • 用戶(名和用戶ID)
  • 朋友(usrid和friendid),friendid是朋友
  • 賬戶(ACC_NO和用戶ID)
  • 的用戶ID交易(from,to和userid)from和to是account_nos和userid是「from」用戶的ID

賬戶調用新交易方法。 「from」是這裏給出的新方法的一個參數。我可以使用這個帳號找到這樣的用戶ID:

@account=Account.find_by(:acc_no => params[:from]) 
@transaction.userid = @account.user_id 

這在我在視圖中打印時有效。 現在,我需要一個「to」的下拉列表,該列表應該填寫此用戶擁有的朋友的所有帳號。對於這一點,我第一次發現該用戶的朋友是這樣的:

@list1=Friend.where(:user_id => @transaction.userid) 

爲了驗證這一點,我只是使用這種方式在我看來,這個名單:

<%= f.select :to, @list1.friendid %> 

這也工作過。現在,使用list1,我需要生成另一個列表,其中包含列表1中所有id的acc_no/accounts。

這是我沒有輸出的地方。我試過這個:

@list2 = @list1.map{|i| Account.where(:user_id => i.friend_id)} 

這不適合我。基本上我需要執行這個查詢:

select * from accounts where user_id in (select friend_id from friends where user_id = (select user_id from account where acc_no = params[:from])) 

我得到了2個嵌套查詢,但我無法獲得工作外查詢相當於

回答

0

您可以嘗試通過在一組ID:

list1_ids = @list1.pluck(:id) 
@list2 = Account.where(user_id: list1_ids) 
+0

對不起,這不起作用。當我嘗試在表單中使用@ list2.acc_no時,即使acc_no是一列,它也會爲#表示「未定義的方法acc_no」。完全相同的代碼爲@ list1工作。如果我做@ list2 = Account.where(user_id:list1_ids).pluck(:acc_no),它只顯示一個空的下拉框 – Akhshay