【发布时间】:2015-09-22 14:03:04
【问题描述】:
我正在制作一个 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.
请帮我解决这个问题。
【问题讨论】:
-
您将需要
accepts_nested_attributes_for,以便事件知道如何处理此属性。那么您的params应该是.permit(:name,:status,:user_id,event_attributes: [ :message ])这还需要更改您的表单以使用引用新事件的fields_for。 This Tutorial 可能比我的解释更有帮助。
标签: ruby-on-rails ruby ruby-on-rails-4 virtual-attribute