2015-08-06 4 views
0

Я хочу, чтобы имя клиента отображалось в столбце имени клиента на одной из моих страниц просмотра модели, но я не могу понять, как это сделать.Как получить данные столбца таблицы из одной модели в другую?

Вот мои ассоциации:

Модель клиента является -

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

Птица Модель -

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

Я также добавил это индексном модель Bird -

<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 %> 

Пользовательский параметр, который я хотел бы передать в колонку имени клиента на странице просмотра индекса птиц, является именем customer.name или: name. Если я попробую это, я получу неопределенную ошибку методов на странице my/birds.

Спасибо!

+1

Попробуйте следующее: 'bird.customer.name' – Deep

ответ

2

я ожидал бы, что это должно работать:

<%= bird.customer.name %> 

Или - если у вас есть птица без клиента - вы можете обойтись без исключений, как это:

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

Или - меньше ошибок - добавьте следующую строку в вашей модели птицы:

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

И использовать его в своих взглядах, как это:

<%= bird.customer_name %> 
+0

' delegate: name, to:: customer, allow_nil: true, prefix: true' было бы досадно, если ожидать Polly The Parrot и получить вместо имени клиентов. – max

+2

@max: Обратите внимание на 'prefix: true'. Эта делегация не переопределит существующий метод 'name', а вместо этого добавит метод' customer_name', который указывает на 'customer.name'. Возможно, вы захотите прочитать информацию о [делегировании и префиксной опции] (http://guides.rubyonrails.org/active_support_core_extensions.html#method-delegation) в руководстве Rails. – spickermann

+0

Ах пропустил это. – max

0

Вы должны использовать в вашей точки зрения, как это:

<%= bird.customer.name %> 
0

В контроллере, для страницы индекса птицы: когда вы запрашиваете Bird.all, сделать Bird.all.includes(:customer) тогда вы будете иметь доступ к <%= bird.customer.name %> на вид

Смежные вопросы