语境:
我有一个company模型有很多projects,有很多tasks。company也有很多,而employees后者又有很多tasks。
架构:
问题:
我正在构建一个表单来创建一个项目,用户可以在其中添加多个tasks. 提交后,表单应创建一条project记录,一条或多task条具有hours和employee_id属性的记录,并(!)检查该employee名称是否已存在于数据库中或创建一个新记录。
我通过在表单中添加 jquery并在我的 Task 模型中使用and方法autocomplete定义一个虚拟属性来解决这个问题。类似于Railscast #102。gettersetter
这成功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这里?
