Ich habe ein paar Modelle in meinem Projekt: Anfrage, Arbeit, Auto und Mitarbeiter. Arbeit ist ein Zwischenmodell zwischen Anfrage und Auto/Mitarbeiter.Rails polymorphe Zuordnung wird nicht gespeichert _Typ
Hier sind die Verbände:
Anfrage
has_many :works, dependent: :destroy
def performers
works.map {|x| x.performer}
end
Arbeit
belongs_to :request
belongs_to :performer, polymorphic: true
Auto
has_many :works, as: :performer
has_many :requests, through: :works, as: :performer
Mitarbeiter
has_many :works, as: :performer
has_many :requests, through: :works, as: :performer
Ansicht Arbeiten zum Erstellen:
<%= form_for([@request, @work]) do |f| %>
<%= (f.collection_select :performer_id, Employee.all, :id, :name) if @request.type == "StaffRequest" %>
<%= (f.collection_select :performer_id, Car.all, :id, :select_info) if @request.type == "CarRequest" %>
<%= f.submit 'OK' %>
<% end %>
Arbeits Controller
def new
@work = @request.works.new
end
def create
@work = @request.works.new(work_params)
end
def work_params
params.require(:work).permit(:performer_id, :request_id)
end
Die probl em ist, dass meine Spalte performer_type immer leer ist, sie speichert den Klassennamen nicht. Was kann das Problem sein? Irgendwelche Ideen?
Können Sie den Code bereitstellen, den Sie verwenden, der eine Zeile in der 'works' Tabelle erstellt? ZB "Work.create" oder "Employee.new (...) .save"? – coreyward
In 'has_many: Anfragen' Warum haben Sie' as:: performer' hinzugefügt? Das 'Through' sollte ausreichen. – Deep