Man*_*Das 9 ruby rubygems ruby-on-rails
我有一种情况需要调用这样的东西:
class Office
attr_accessor :workers, :id
def initialize
@workers = []
end
def workers worker
type = worker.type
resp = Worker.post("/office/#{@id}/workers.json", :worker => {:type => type})
worker = Worker.new()
resp.to_hash.each_pair do |k,v|
worker.send("#{k}=",v) if worker.respond_to?(k)
end
self.workers << worker
end
end
Run Code Online (Sandbox Code Playgroud)
工人阶级
class Worker
attr_accessor :office_id, :type, :id
def initialize(options={})
@office_id = options[:office].nil? ? nil : options[:office].id
@type = options[:type].nil? ? nil : options[:type].camelize
if !@office_id.nil?
resp = self.class.post("/office/#{@office_id}/workers.json", :worker => {:type => @type})
@id = resp.id
office = options[:office]
office.workers = self
end
end
def <<(worker)
if worker
type = worker.type
resp = Worker.post("/office/#{office_id}/workers.json", :worker => {:type => type})
debugger
@id = resp.id
resp.to_hash.each_pair do |k,v|
self.send("#{k}=",v) if self.respond_to?(k)
end
debugger
return self
end
end
Run Code Online (Sandbox Code Playgroud)
我可以做这样的事情
office = Office.new()
new_worker = Worker.new()
office.workers new_worker
Run Code Online (Sandbox Code Playgroud)
但我需要做同样的事情,如上所述.在此之前,我需要更改Office的初始化方法以启动def <<(worker)工作器实例的方法.
class Office
...
def initialize
@workers = Worker.new
@workers.office_id = self.id
end
office = Office.new()
new_worker = Worker.new()
office.workers << new_worker
Run Code Online (Sandbox Code Playgroud)
现在问题是,后面的实现创建了2个工人实例?
我不是 100% 确定为什么您在这里没有收到错误,但由于 Office#workers 最后一行是 self.workers <<worker,因此您正在添加在 Office#workers 中创建的新工作人员(在第 3 行创建)方法),然后返回工人对象,然后使用在方法外部创建的新工人再次调用 #<<
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |