我有一个简单的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
Run Code Online (Sandbox Code Playgroud)
这给了我错误
undefined method `id'
Run Code Online (Sandbox Code Playgroud)
我正在使用rails 2.3.5我看过这个代码在很多书中都有用.我的客户表有一个ID列.我已在实际DB中验证过.
self.add_customer是类方法,而不是实例方法,并且id只有实例中的方法.
编辑:
假设你有:
class Customer < ActiveRecord::Base
belongs_to :address
end
Class Address < ActiveRecord::Base
has_many :customers
end
Run Code Online (Sandbox Code Playgroud)
然后你可以:
@address.customers.create(:first_name => first_name, :last_name => last_name)
Run Code Online (Sandbox Code Playgroud)
它会自动将新客户与@address.
或者,您可以从方法定义中删除self
def add_customer(firstname, lastname)
@cust = Customer.new(:firstName => firstname, :lastName => lastname, :address_id => self.id)
@cust.save
end
Run Code Online (Sandbox Code Playgroud)
should just work. It works because if you declare add_customer as instance method (without self or class name like Address.add_customer) then it has access to self.id
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |