2017-10-15 42 views
1

如何從表user通過user_id引用的表Friend通過user_id條件5和狀態爲pending並將其置於每個循環中但我也需要在rails中的朋友控制器的內容。感謝很多的幫助在Rails中查詢

控制器

@add = Friend.where(user_id: 5, status: 'Pending') 

用戶數據庫

+-----------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+-----------------+--------------+------+-----+---------+----------------+ 
| id    | int   | NO | PRI | NULL | auto_increment | 
| first_name  | text   | YES |  | NULL |    | 
| last_name  | text   | YES |  | NULL |    | 
| email   | text   | YES |  | NULL |    | 
| contact_number | varchar  | YES |  | NULL |    | 
| birth_date  | date   | YES |  | NULL |    | 
| created_at  | datetime  | NO |  | NULL |    | 
| updated_at  | datetime  | NO |  | NULL |    | 

朋友

+--------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+--------------+------+-----+---------+----------------+ 
| id   | int   | NO | PRI | NULL | auto_increment | 
| request_date | date   | YES |  | NULL |    | 
| reason  | text   | YES |  | NULL |    | 
| status  | varchar(255) | YES |  | NULL |    | 
| userid  | int   | YES | MUL | NULL |    | 

回答

2

如何:

@add = Friend.joins(:user).select("users.first_name, users.last_name").where(user_id: 5, status: 'Pending') 
+0

現在iam加入3個表格@add = Friend.joins(user::profile).where(user_id:5,status:'Pending')但是當我在每個循環中使用它時​​<%= s.first_name %>未定義的方法'first_name' – Pat

+0

你能檢查's'是哪個模型的對象嗎? – rony36

0

所有你需要在Friend modelbelongs_to user然後

@add =Friend.where("user_id = ? AND status = ?", 5,"Pending") 

<@add.each do |s|> 
    <%s.user.first_name%> 
    <%=<%s.user.last_name%> 
    // and so on.. 
<%end%> 
0

好像已經的youre獲取用戶的ID,存儲在USER_ID領域。爲了得到相關的用戶,我會做

@user = User.find(@ add.id)

這檢索基於您通過ID的用戶,並從那裏你可以做的東西一樣

@ user.first_name

得到的值

+0

我如何將它放在每個循環中,我還需要<%@ add.each do | s |的內容%> – Pat

+0

我會事先做好循環,在你的控制器/無論你看這個數據,併合並字段。所以你可以做這樣的事情:@ add.map {| a | u = User.find(a.id); a [:first_name] = u.first_name; a [:last_name] = u.last_name;返回a} –