2017-10-15 88 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} –