ruby-on-railsassociationsransackpluck

Rails pluck from associated tables


I have two tables sample

has_many :abundances
self.primary_key = :sample_id

and abundance

has_many :samples
self.primary_key = :sample_id

In abundances controller i have a ransack search

def index
@search = Abundance.ransack(params[:q])
@abundances = @search.result
@abundancez =  @abundances.paginate(:page => params[:page],:per_page => 100)
   end
end

in the abundances view, I have a filtered table based on the ransack parameters.

<%= will_paginate @abundancez%>
<% @abundancez.each do |abundance| %>

<td><%= abundance.sample_id %><td>
<td><%= abundance.length %><td>
<td><%= abundance.eff_length%><td>
<td><%= abundance.est_counts%><td>
<td><%= abundance.tpm%><td>


<%  end %>

The sample table has a field, race that i want to pull up in the abundances view when via corresponding to the filtered parameters above.

Ive tried to use pluck in the view

<%= will_paginate @abundancez%>
<% @abundancez.each do |abundance| %>

<td><%= abundance.sample_id %><td>
<td><%= abundance.length %><td>
<td><%= abundance.eff_length%><td>
<td><%= abundance.est_counts%><td>
<td><%= abundance.tpm%><td>
<td><%= samples.pluck(abundance.samples_id,:race)%></td>

but i get an error. Not sure if I'm going about this the right way or if I the syntax is incorrect.

Thanks!


Solution

  • The thing here is that you defined that an abundance has_many samples, so you can't return the value of the race for one sample like you are doing here.

    as you said in your comments, it seems that your associations are wrong, change your abundance model from has_may, to belongs_to

    belongs_to :sample
    

    and then on your view, you can return the race value like this

    <%= will_paginate @abundancez%>
    <% @abundancez.each do |abundance| %>
    
    <td><%= abundance.sample_id %><td>
    <td><%= abundance.length %><td>
    <td><%= abundance.eff_length%><td>
    <td><%= abundance.est_counts%><td>
    <td><%= abundance.tpm%><td>
    <td><%= abundance.sample.race %></td>
    

    this because you said in the comments that abundances have a sample_id attribute, so abundance belongs_to a sample. of course this will work if abundance have the attribute of sample_id filled with a valid ID (an existing one sample) and of course, that it has a race value.