Новичок: доступ к атрибутам модельного объекта - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть два класса моделей: Автомобили и Клиенты ,

Модель Автомобили :

class car < ActiveRecord::Base

  #car has attribute :town_code

  has_many :customers

end

Модель Клиенты :

class customer < ActiveRecord::Base
  # customer has attribute :first_name, :last_name

  belongs_to :car
end

В моем контроллере у меня есть следующий код:

my_customer = Customer.find_all_by_first_name('John')
p my_customer.last_name
p my_customer.car_id

Но я получил no attribute 'car_id' Ошибка , я также получил no attribute 'last_name' Ошибка .

--- Вопрос 1: ---

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

--- Вопрос 2: ---

но код: my_customer.map(&:car_id) работает для доступа к car_id, однако я не совсем понимаю код .map(&:car_id), что он делает? Может кто-нибудь объяснить мне?

1 Ответ

2 голосов
/ 09 ноября 2011

Причина, по которой вы не можете сделать my_customer.last_name, заключается в том, что my_customer здесь не Клиент, а массив Клиентов, поскольку вы сделали find_all. Вот почему my_customer.map(&:car_id) работает. Этот бит кода означает: для каждого объекта в массиве my_customer вызовите метод car_id и вставьте результаты в новый массив - и верните этот новый массив.

Если клиент принадлежит автомобилю, вам нужно указать car_id в таблице клиентов (что соответствует столбцу id в таблице автомобилей). Кроме того, вы не должны иметь фамилию в таблице автомобилей, а в таблице клиентов.

Похоже, вам, возможно, придется отступить назад и лучше понять Ассоциации ActiveRecord . В любом случае, мне непонятно, зачем покупателю принадлежать к машине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...