在 Rails 中查询

Querying in Rails

如何通过 table 朋友以 user_id 条件 user_id 5 引用的 table 朋友获取名字和姓氏并且状态未决并将其放在每个循环中,但我还需要 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    |                |

您需要在 Friend model belongs_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%>

您似乎已经获取了存储在 user_id 字段中的用户 ID。为了获得关联用户,我会做

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

这会根据您传递的 ID 检索用户,您可以从那里执行类似

的操作

@user.first_name

获取值

这个怎么样:

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