Je crée une application Rails 4. Chaque incident
appartient à un user
. Chaque incident has many events
. Je veux que je puisse créer un incident avec current_user.incidents.new
et lui transmettre un attribut message
qui existe dans le modèle d'événement. En création, je souhaite créer un nouvel événement avec le dit message
.Attributs virtuels Rails - Attribut inconnu Erreur
Voici mon modèle d'incident.
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
Mais, quand je lance @i = Incident.new(message: 'something')
, je reçois ActiveRecord::UnknownAttributeError: unknown attribute 'message' for Incident.
S'il vous plaît me aider à comprendre cela.
Vous aurez besoin [ 'accepts_nested_attributes_for'] (http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for) de telle sorte que l'Incident sait quoi faire avec cet attribut. alors votre 'params' devrait être' .permit (: nom,: statut,: user_id, event_attributes: [: message]) 'Cela nécessitera également des changements à votre formulaire pour utiliser' fields_for' qui fait référence à un nouvel événement. [Ce tutoriel] (https://gorails.com/episodes/forum-nested-attributes-and-fields-for) pourrait aider mieux que mon explication. – engineersmnky