我有一个简单的Customer模型,它有id,firstName,lastName,address_id列。
在方法中,我有以下方法将数据添加到数据库:
def self.add_customer(firstname, lastname)
@cust = Customer.new(:firstName => firstname, :lastName => lastname, :address_id => self.id)
@cust.save
end
这给了我错误
undefined method `id'
我正在使用rails 2.3.5我看过这个代码在很多书中都有用。我的客户表有一个ID列。我已在实际DB中验证过。
答案 0 :(得分:6)
self.add_customer
是类方法,而不是实例方法,并且只在实例中使用id
方法。
编辑:
假设你有:
class Customer < ActiveRecord::Base
belongs_to :address
end
Class Address < ActiveRecord::Base
has_many :customers
end
然后你可以:
@address.customers.create(:first_name => first_name, :last_name => last_name)
它会自动将新客户与@address
相关联。
或者,您可以从方法定义和
中删除selfdef add_customer(firstname, lastname)
@cust = Customer.new(:firstName => firstname, :lastName => lastname, :address_id => self.id)
@cust.save
end
应该正常工作。这是有效的,因为如果您将add_customer
声明为实例方法(没有自己或类名称Address.add_customer
),那么它可以访问self.id