0

我有这部分代码:

<% current_user.meta_accounts.each do |meta_account| %>
    <%= content_tag(:li, link_to(meta_account.name, 'javascript:void(0)')) %>
<% end %>

所以,我希望 RailsMetaAccount在列表中显示我所有的 s,但我得到了这个:

<li><a href="javascript:void(0)">Wallet</a></li>
<li><a href="javascript:void(0)">Credit card</a></li>
<li><a href="javascript:void(0)">Debit card</a></li>
<li><a href="javascript:void(0)">Debts</a></li>
<li><a href="javascript:void(0)">javascript:void(0)</a></li> #This is the problem

所以,它也显示了我MetaAccount,它还没有被创建。

在我的 MetaAccounts 表中,我有这个。我正在使用 Postgres。

在此处输入图像描述

因此,它还向我显示了最后一行,其中 row_number 是*。我不知道为什么,以及如何避免这种情况。

谢谢你的帮助!

4

2 回答 2

1

您在 PostgreSQL 中看到的 * 行不是实际记录,它只是一种快速创建新记录的方法。如果您想确定,请运行以下查询:

SELECT COUNT(*) FROM MetaAccounts WHERE user_id=1

它将返回 4。

我认为问题出MetaAccountcurrent_user.meta_accounts. 例如,在表单中可能就是这种情况,您可以在其中构建一个绑定到表单的空对象。确保您没有呼叫current_user.meta_accounts.build(...).

如果是这样,您可以简单地在each循环中跳过所有MetaAccount带有空白的对象name

于 2013-08-31T12:57:04.953 回答
1

尝试:

<% current_user.meta_accounts.select(&:persisted?).each do |meta_account| %>
  <%= content_tag(:li, link_to(meta_account.name, 'javascript:void(0)')) %>
<% end %>
于 2013-08-31T13:11:48.500 回答