3

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.

これを理解するのを手伝ってください。

4

2 に答える 2

2

ActiveRecord::new問題は、値をデフォルトのメソッド forに渡していることです。Incidentこれは、ゲッター、セッター、アクセサーを気にせず、列に直接行きます

基本メソッドに影響を与えることなく、必要に応じて巧妙なロジックを実装できるビルド メソッドをオーバーライドまたは適応させる人もいますinitialize

于 2015-09-22T14:14:15.860 に答える
1

Incidentモデルは ActiveRecord::Base から継承するため、コンストラクターを継承します。ActiveRecord コンストラクターは、モデル属性 (db 列) のみをパラメーターとして受け入れます。任意のインスタンス メソッドを呼び出そうとしています。インスタンスを作成してからメッセージを追加するクラス メソッドを作成できます。

def self.create_with_message(msg)
   i = Incident.new
   i.message(msg)
   return(i)
end
于 2015-09-22T14:18:11.167 に答える