LadyStensberg
LadyStensberg

Reputation: 49

How do I get the table column data from one model into the view of another?

I want the customer name to appear in the customer name column on one of my model view pages, but I can't seem to figure out how to do this.

Here are my associations:

Customer Model is -

class Customer < ActiveRecord::Base
  has_many :appointments, :dependent => :destroy, :as => :customer
  has_many :birds, :dependent => :destroy, :as => :customer
end

Bird Model is -

class Bird < ActiveRecord::Base
  belongs_to :customer
  has_one :appointment
end

I've also added this to the Bird model index view -

<tbody>
<% @birds.each do |bird| %>
  <tr data-link="<%= bird_path(bird) %>">
            <td><%= bird.customer_id %></td>
            <td><%= bird.name %></td>
            <td><%= bird.breed %></td>
            <td><%= bird.color %></td>
            <td><%= bird.age %></td>
  </tr>
  <% end %>

The customer parameter I'd like to pass into the customer name column on the birds index view page is customer.name, or :name. If I try that, I get an undefined methods error on my /birds page.

Thanks!

Upvotes: 0

Views: 82

Answers (3)

nguyen
nguyen

Reputation: 71

In your controller, for the bird index page: when you query for Bird.all, do Bird.all.includes(:customer) then you will have access to <%= bird.customer.name %> in the view

Upvotes: 0

Gaurav Gupta
Gaurav Gupta

Reputation: 1191

You need to use in your view like this :

<%= bird.customer.name %> 

Upvotes: 0

spickermann
spickermann

Reputation: 107077

I would expect that this should work:

<%= bird.customer.name %>

Or - if you have birds without an customer - you might want avoid exceptions like this:

<%= bird.customer.try(:name) %>

Or - less error prone - add the following to your bird model:

delegate :name, to: :customer, allow_nil: true, prefix: true

And use it in your views like this:

<%= bird.customer_name %>

Upvotes: 2

Related Questions