Я пытаюсь сохранить атрибуты связанной модели через метод setter.Rails: как получить объект в методе 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
становится nil
при использовании внутри метода сеттера?
Его значение доступно в модели вне метода сеттера.
validate :is_company_id_available
def is_company_id_available
if company_id != nil
errors.add(:task, "#{company_id.inspect}")
end
end
возвращает сообщение company_id
в сообщении об ошибке.
Кроме того, вручную определение company_id = 1
внутри метода setter экономит только штраф.
Как правильно установить атрибут внутри метода setter?
EDIT:
Возможно ли, что атрибут company_id
каким-то образом должен быть установлен в качестве аргумента этого метода?
Возможно, я смогу обновить company_id
после создания записи employee
.
Я не вижу employee_company_id определяется где-нибудь – Vic
@Vic, извиняться. Я передаю атрибут непосредственно из формы с помощью 'attr_accessor'. Это не лучшее решение, но я пытаюсь решить одну проблему за раз. – Matthias