语境:
我有一个company
模型有很多projects
,有很多tasks
。company
也有很多,而employees
后者又有很多tasks
。
架构:
问题:
我正在构建一个表单来创建一个项目,用户可以在其中添加多个tasks
. 提交后,表单应创建一条project
记录,一条或多task
条具有hours
和employee_id
属性的记录,并(!)检查该employee
名称是否已存在于数据库中或创建一个新记录。
我通过在表单中添加 jquery并在我的 Task 模型中使用and方法autocomplete
定义一个虚拟属性来解决这个问题。类似于Railscast #102。getter
setter
这成功employee_id
地设置tasks
并创建了employee
员工name
和的新记录task_id
。
目前的问题是模型没有保存company_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
目前这会产生错误:
undefined local variable or method "company_id" for #<Task:0x98438b8>
编辑:
或者,如果我尝试project.company_id
这告诉我project
是 NilClass:
undefined method company_id for nil:NilClass
更新:
仍然没有解决。任何想法为什么project
在nil
这里?