我有2个模特
征用
emp has_many requisitions
requisition belongs_to emp
在我的控制台中:
Requisition Load (1.0ms) SELECT "requisitions".*FROM"requisitions" WHERE "requisitions"."emp_id" = $1 [["emp_id", 3]]=> #<ActiveRecord::Associations::CollectionProxy [#<Requisition id: 7, name: "Mo
bile", particular: "jskfbhksjfkjfgweh", unit: "LVP", quantity: 7, from: "Anil",
created_at: "2014-04-05 14:27:19", updated_at: "2014-04-05 14:27:19", total: 539, cost: 77, emp_id: 3>]>
当我在我的rails应用程序中应用
<div class="container">
<div class="row">
<div class="col-md-9">
<form class = "form-inline" action="#" method="get">
<div class="input-group">
<input type="text" class="form-control" id="system-search" placeholder="Search" name="q" required>
<span class="input-group-btn">
<button type="submit" class="btn btn-default"><i class="fa fa-search"></i></button>
</span>
</div>
</form>
</div>
</div>
<div class = "row">
<div class="col-md-9">
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr style = 'background-color: white'>
<th> <i class="fa fa-male"></i> Username </th>
<th><i class="fa fa-bars"></i> Email</th>
<th><i class="fa fa-bars"></i>count</th>
<th><i class="fa fa-bars"></i>Time</th>
<th><i class="fa fa-bars"></i>Last time</th>
<th><i class="fa fa-envelope-o"></i>ip</th>
<th><i class="fa fa-map-marker"></i>last ip</th>
<th><i class="fa fa-phone"></i>TAKE actions</th>
</tr>
</thead>
<tbody>
<% @emp.each do |e| %>
<tr >
<td><%= e.username %></td>
<td><%= e.email %></td>
<td><%= e.sign_in_count %></td>
<td><%= e.current_sign_in_at %></td>
<td><%= e.last_sign_in_at %></td>
<td><%= e.current_sign_in_ip %></td>
<td><%= e.last_sign_in_ip%></td>
<td><button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
<%= e.requisitions.count %> Assets
</button>
</tbody>
</table>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel"></h4>
</div>
<div class="modal-body">
<table class="table table-striped table-bordered table-condensed">
<tr style = 'background-color: white'>
<th> <i class="fa fa-male"></i> Asset name </th>
<th><i class="fa fa-bars"></i> particular</th>
<th><i class="fa fa-bars"></i>unit</th>
<th><i class="fa fa-bars"></i>quantity</th>
<th><i class="fa fa-bars"></i>Last cost</th>
</tr>
<tbody>
<tr>
<%= e.requisitions.map do |e| %>
<%= e.name %>
<% end %>
</tr>
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</td>
</tr> <%end %>
</div>
</div>
</div>
问题: 而不是给出结果它给出
<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Requisition:0x3cd32c0>
答案 0 :(得分:1)
您的代码需要进行一些更改:
更改
<%= e.requisitions.map do |e| %>
<%= e.name %>
<% end %>
要
<% e.requisitions.each do |requisition| %>
<tr>
<td><%= requisition.name %></td>
<td><%= requisition.particular %></td>
...
</tr>
<% end %>
删除=
并将块变量更改为requisition
。 =
导致<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Requisition:0x3cd32c0>
部分渲染输出。你不应该渲染e.requisitions
。您还需要使用适当的<tr>
和<td>
元素包围数据。
根据聊天会话,即使在修复第1点之后,您的代码也无法正常运行。每次单击<%= e.requisitions.count %> Assets
按钮时,即使您单击任何其他员工资产按钮,也会呈现第一个员工的资产。
发生这种情况是因为您为模态功能创建的所有已创建的div使用相同的ID myModal
。
因此,当您单击资产按钮时,DOM将查找标识为myModal
的第一个元素并将其返回。因此,您每次都会获得第1 emp
条的详细信息。
为了避免这种情况,您需要为所有模态div制作唯一的ID。
替换
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
使用
<div class="modal fade" id="myModal<%= e.id %>" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
这将为id
div
模态emp with id 1 as : myModal1, emp with id 2 as : myModal2
元素
要使更改#2正常工作,您需要更新资产链接,如下所示:
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal<%= e.id %>">
<%= e.requisitions.count %> Assets
</button>
由于data-target="#myModal<%= e.id %>"
,将选择适当的模态。对于emp with id 1 as : myModal1 would be shown, emp with id 2 as : myModal2 would be shown
答案 1 :(得分:0)
此
e.requisitions
将返回一个请求对象的集合:这是ActiveRecord::Associations::CollectionProxy....
对象。然后,erb标签将调用它上面的to_s将其转换为字符串,以显示在网页上。这是你所看到的。
您期望看到什么?如果您想查看与相关申请相关的一些数据,您需要在代码中询问。由于您只有一个td可以在那里玩,您可能需要将关联的请购单中的数据汇总到一个字符串中(就像您在.count td上所做的那样),或者如果您想迭代请购单,您将需要需要重新考虑你的桌子。
EDIT1 - 对海报编辑的回应。
你这样做:
<tr>
<%= e.requisitions.map do |e| %>
<%= e.name %>
<% end %>
</tr>
这将生成一个名称数组并将它们推送到tr中。它们可能会连接在一起(取决于你的ruby版本),它们不会在td中。不好。我想你想做这样的事情:请注意我对方法名称(特别是last_cost)有点猜测,所以你需要确保它是正确的。希望你能理解这个想法是什么。
<table class="table table-striped table-bordered table-condensed">
<tr style = 'background-color: white'>
<th> <i class="fa fa-male"></i> Asset name </th>
<th><i class="fa fa-bars"></i> particular</th>
<th><i class="fa fa-bars"></i>unit</th>
<th><i class="fa fa-bars"></i>quantity</th>
<th><i class="fa fa-bars"></i>Last cost</th>
</tr>
<tbody>
<% e.requisitions.each do |requisition| %>
<tr>
<td><%= requisition.name %></td>
<td><%= requisition.particular %></td>
<td><%= requisition.unit %></td>
<td><%= requisition.quantity %></td>
<td><%= requisition.last_cost %></td>
</tr>
<% end %>
</tbody>
</table>