新手:访问模型对象的属性

时间:2011-11-09 16:12:03

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.1

我有两个模型类:汽车客户

模型汽车

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'列。为什么我不能以我的控制器代码的方式访问它们?

---问题2:---

但是代码:my_customer.map(&:car_id)正在用于访问car_id,但是,我不太了解代码.map(&:car_id),它有什么作用?有谁可以向我解释一下?

1 个答案:

答案 0 :(得分:2)

您无法执行my_customer.last_name的原因是my_customer不是客户,而是一系列客户,因为您执行了find_all。这也是my_customer.map(&:car_id)有效的原因。这段代码的含义是:对于数组my_customer中的每个对象,调用方法car_id并将结果插入到一个新数组中 - 并返回该新数组。

如果客户属于汽车,则客户表中需要car_id(对应于汽车表中的id列)。此外,您不应该在car表中使用last_name,而应该在customer表中。

听起来你可能需要退后一步,更好地了解ActiveRecord associations。无论如何,我不清楚为什么顾客会属于汽车。