0

<% @sp_references.each do |sp_ref| %>
<% sp_ref.all_references.each_with_index do |tax_ref, i| %> <%if (tax_ref.reference.uniq) && (tax_ref.reference !~ /emend$/i) %> <%= tax_ref.reference %> <%end%> <%end%> <%end%>


This 'uniq' option to get distinct elements in tax_ref.reference is not working. It shows "undefined method `uniq' for #

Palani Kannan
  • 1,613
  • 2
  • 18
  • 29

3 Answers3

0

It seems to me like tax_ref.reference is not an array. uniq should be called on arrays. Try this instead:

<% sp_ref.all_references.keys.uniq.each do |tax_ref| %>
    <%if (tax_ref.reference !~ /emend$/sp_ref.all_references[tax_ref]) %>
        <%= tax_ref.reference %>
    <%end%>
<% end %>
David Sulc
  • 25,946
  • 3
  • 52
  • 54
0

uniq is a method on any enumerable object (arrays). So you can't call it on the reference object of tax_ref.

Instead, you'll want to call it on sp_ref.all_references, like sp_ref.all_references.uniq.each

This SO Question has some suggestions on filtering out duplicate objects when only an attribute is duplicated (not unique).

Community
  • 1
  • 1
Jesse Wolgamott
  • 40,197
  • 4
  • 83
  • 109
0
<%arr = Array.new %> <% @sp_references.each do |sp_ref| %> <% sp_ref.all_references.each_with_index do |tax_ref, i| %>  <%if (tax_ref.reference !~ /emend$/i) %>  <% arr.push("#{tax_ref.reference}") %> <%end%>  <%end%>  <%end%> <%= arr.uniq %>

It works for me.

Palani Kannan
  • 1,613
  • 2
  • 18
  • 29