rails模型中未​​定义的方法self.id.

时间:2010-01-20 06:04:34

标签: ruby-on-rails

我有一个简单的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中验证过。

1 个答案:

答案 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相关联。

或者,您可以从方法定义和

中删除self
def 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