背景:
我有一个包含多个项目和任务的公司
模型,同时该公司
还拥有许多员工
,这些员工
也有许多任务
。
架构:
问题:
我正在构建一个表单来创建项目,用户可以添加多个任务
。提交表单后,表单应该创建一个单独的项目
记录,一个或多个带有小时数
和员工ID
属性的任务
记录,并且检查数据库中是否已存在员工
姓名或创建一个新的。
我通过向表单添加jquery的自动完成
功能并在我的Task模型中定义具有getter
和setter
方法的虚拟属性来解决这个问题。类似于Railscast #102。
这成功地设置了任务
中的员工ID
并创建了一个新的员工
记录,其中包括员工姓名
和任务ID
。
目前的问题是,该模型没有保存公司ID
。
我的代码:
class Task < ActiveRecord::Base
belongs_to :project
belongs_to :employee
def employee_name
employee.try(:name)
end
def employee_name=(name)
self.employee = Employee.find_or_create_by(name: name) if name.present?
end
end
问题:
如何使父模型的company_id
属性可在我的任务(Task)
模型的setter方法中使用?像这样:
def shareholder_name=(name)
self.shareholder = Shareholder.find_or_create_by(name: name, company_id: company_id) if name.present?
end
目前出现以下错误:
#<Task:0x98438b8>
的company_id
未定义,无法使用。
编辑:
或者,如果我尝试使用project.company_id
,则会告诉我project
是一个NilClass:
nil:NilClass
的company_id
方法未定义。
更新:
仍未解决。有任何想法为什么这里的project
是nil
吗?
company_id
属性。有什么建议吗? - Matthias