【问题标题】:How to return ActiveRecord Association Proxy on ERB如何在 ERB 上返回 ActiveRecord 关联代理
【发布时间】:2014-01-29 23:38:06
【问题描述】:

所以我的模型中有一个标准的 has_many through 关联,与这里的问题非常相似:Loop through ActiveRecord::Associations::CollectionProxy with each

我在那个问题中使用了建议,但我认为我在我的 ERB 文件中遇到了一些问题,以便它显示在我的应用程序中。目前我有以下内容:

<%= @memberships.map do |a| %>
<%=a.name%>
<% end %>

在这种情况下,会员模型是用户和组织拥有很多的模型(@memberships = @user.organizations)。所以@memberships.class 返回

ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Organization

在 Rails 控制台上。所以此刻,在浏览器中,代码在用户位于两个组织的页面上返回:

orgone orgtwo["\n", "\n"]

我只是不知道如何操作代理类来返回我想要的。谢谢!

更新:

我想通了,我不得不删除块顶部的 =,并用逗号添加了一些样式:

<% @memberships.map do |a| %>
<h3><%=a.name %> <%= ", " unless a == @memberships.last %></h3>
<% end %>

【问题讨论】:

  • 你想要什么?打印每个会员的名字? @memberships.each 应该可以正常工作。
  • 是的,我已经知道如何在只有一个时打印会员资格,但在有多个时却不行,@memberships.each 给了我,#<0x007fdfaa07dc58>
  • &lt;&amp;&gt;

标签: ruby-on-rails ruby activerecord


【解决方案1】:

如果你想打印每个会员的名字,你想要的是

<% @memberships.each do |membership| %>
   <%= membership.name %>
<% end -%>

ERB 中的&lt;% 前缀执行代码而不将结果附加到输出缓冲区,而&lt;%= 前缀输出表达式结果的字符串表示形式。由于每个都返回一个枚举器,&lt;%= 将返回枚举器的字符串表示形式,类似于#&lt;Enumerator:0xDEADBEEF

【讨论】:

  • 嘿,非常感谢!我更早地发现了它,这是我非常愚蠢的错误,刚刚回到堆栈并表现出+1的爱。不过谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多