虚拟属性Rails - 未知属性错误

时间:2015-09-22 14:03:04

标签: ruby-on-rails ruby ruby-on-rails-4 virtual-attribute

我正在制作Rails 4应用程序。每个incident都属于user。每次事件has many events。我希望我可以使用current_user.incidents.new创建一个事件,并向其传递一个存在于事件模型中的属性message。在创建时,我希望用message创建一个新事件。

这是我的事件模型。

class Incident < ActiveRecord::Base
  # The 'incident' model.
  # Incidents are created by Users (belongs_to :user)
  # Incidents may be public or private.
  # Incidents have many events (identified, fixing, etc.)

  belongs_to :user
  has_many :events
  validates :name, presence: true, length: {maximum: 256}
  validates_presence_of :component
  validates_presence_of :public
  validates_presence_of :user_id

  attr_accessor :message
  validates_associated :message, presence: true

  def message
    Event.find_by_incident_id(self.id).message
  end

  def message=(value)
    self.events.new(message: value, status: self.status)
  end

  private
    def incident_params
      params.require(:incident).permit(:name, :status, :user_id, :message)
    end

end

但是,当我运行@i = Incident.new(message: 'something')时,我得到ActiveRecord::UnknownAttributeError: unknown attribute 'message' for Incident.

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

问题在于您将值传递给ActiveRecord::new的默认Incident方法,该方法不关心您的getter,setter和accessors,{{3 }}

有些人会覆盖或调整goes straight to the columns,可以按照您的要求实现聪明的逻辑,而不会影响基本的initialize方法。