我正在尝试通过setter方法保存关联模型的属性。
我的代码:
class Task < ActiveRecord::Base
belongs_to :project
belongs_to :employee
attr_accessor :company_id
attr_accessor :employee_name
def employee_name
employee.try(:name)
end
def employee_name=(name)
self.employee = Employee.find_or_create_by(name: name,
company_id: company_id.to_i) if name.present?
end
end
但是,这会将属性保存为nil
。
为什么company_id
属性在setter方法中使用时会变成nil
?
它的值在setter方法之外的模型中可用。
validate :is_company_id_available
def is_company_id_available
if company_id != nil
errors.add(:task, "#{company_id.inspect}")
end
end
在错误消息中返回正确的company_id
。
另外,在de setter方法中手动定义company_id = 1
可以保存正常。
如何在setter方法中正确设置属性?
编辑:
是否有可能以某种方式将company_id
属性设置为此方法的参数?
或者我可以在创建company_id
记录后更新employee
。