我意识到标题有点令人困惑但我的问题很简单。我的rails 5应用程序中有两个型号。用户和费用。每笔费用属于用户。我有一个索引页面,其中列出了所有费用。我可以从费用表中列出每个费用的用户ID,但我想在users表中查找用户名(在列用户名中),并用费用显示它。我写的观点如下。但它没有用。
<p id="notice"><%= notice %></p>
<h1>Teamjournals</h1>
<table style="padding: 2px; width: 50%" border="2px" align="center">
<thead>
<tr>
<td align="center"><%= link_to new_expense_path, :class =>"btn btn-success btn-wide" do%>Add New Expense<% end %></td>
</tr>
<tr>
<th>User</th>
<th>Expense Date</th>
<th>Currency</th>
<th>Expense Amount</th>
<th>Description</th>
<th colspan="1"></th>
</tr>
</thead>
<tbody>
<% @expenses.each do |expense| %>
<tr>
<td><%= User.joins(:expense).where('expense.user_id = ?', @user.id) %></td>
<td><%= expense.expense_date %></td>
<td><%= expense.currency.currency %></td>
<td align="right"><%= expense.expense %></td>
<td><%= expense.description %></td>
</tr>
<% end %>
</tbody>
</table>
答案 0 :(得分:2)
好的,你在@expenses
的迭代中就有了这一行:
<%= User.joins(:expense).where('expense.user_id = ?', @user.id) %>
您可以将其更改为:
<% user = expense.user %>
请注意,我使用<%
而不是<%=
,因为我只是尝试分配变量,而不是将输出打印到html。
然后在定义user
后,您可以说<%= user.name %>
。
您应该阅读有关活动记录关联的更多信息,但这里有一些关于您已经显示的查询的附带评论
User.joins(:expense).where('expense.user_id = ?', @user.id)
在这种情况下,您应该使用belongs_to
生成的方法而不是编写查询。但是在您确实想要编写自定义查询的情况下,只有在想要获取数组时才应使用where
。在这种情况下,您正在寻找单个记录,以便您可以使用find_by
。此外,你在这里加入的连接是不必要的
# any of these works
user = User.where('id = ?', expense.user_id).first
user = User.where(id: expense.user_id).first
user = user.find_by(id: expense.user_id)