Rails:如何将对象转换为setter方法?

时间:2016-02-21 15:18:59

标签: ruby-on-rails associations getter-setter

我正在尝试通过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

0 个答案:

没有答案