Rails - So zeigen Sie das Attribut eines zugeordneten Modells an
Ich versuche, eine App in Rails 4 zu erstellen.
Ich habe gerade diese verwandte Frage gestellt und eine klare Antwort erhalten. Es scheint, als ob ich nicht verstehen kann, wie ich diese Logik anderswo anwenden kann.
Rails So zeigen Sie Attribute eines übergeordneten Objekts an
Ich habe ein Benutzermodell, ein Profilmodell, ein Projektmodell und ein Hochschulmodell.
Verbände sind:
Profile belongs to university
Profile belongs to user
University has many profiles
University has many projects
Projects HABTM user
Projects belong to universities
In meinem Projektcontroller definiere ich @creator wie folgt:
def create
logger.debug "xxx create project"
#authorise @project
@project = Project.new(project_params)
@project.creator_id = current_user.id
@project.users << current_user
respond_to do |format|
if @project.save
format.html { redirect_to @project }
format.json { render action: 'show', status: :created, location: @project }
else
format.html { render action: 'new' }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
Ich versuche, creator_profile so zu definieren:
def show
#authorise @project
@project = Project.find(params[:id])
@creator = User.find(@project.creator_id)
@creator_profile = @creator.profile
end
In meiner Uni-Tabelle habe ich Attribute namens Logo und Name. Ich verwende einen Avatar-Uploader, in dem ich ein Logo definiert habe (deshalb habe ich unten zwei .logo).
Zeigen Sie in meinen Projekten, dass ich die Universität anzeigen möchte, zu der der Projektersteller gehört.
Ich habe es versucht:
<%= image_tag(@creator_profile.university.logo.logo) %>
<div class="generaltext"><%= @creator_profile.university.name %> </div>
Ich erhalte das Ergebnis: undefined method `logo 'for nil: NilClass
Auf der Grundlage des Links zu meinem Problem oben
<%= image_tag(creator_profile.university.logo.logo) %>
<div class="generaltext"><%= creator_profile.university.name %> </div>
Ich erhalte dieses Ergebnis:
undefined local variable or method `creator_profile' for #<#<Class:0x007f998f17ad88>:0x007f998d1ce318>
Ich bin mir nicht sicher, ob ich die sehr detaillierten Erklärungen in der Antwort auf meine vorherige Frage verstanden habe. Wenn die erste Version richtig ist, verstehe ich die Erklärung überhaupt nicht. Wenn die zweite Version richtig ist, warum erscheint dann diese Fehlermeldung?
Ich frage mich, ob das Problem dadurch entsteht, dass es keine Verbindung zwischen Universität und Benutzer gibt. Ich hatte gehofft, basierend auf dem Benutzer, der das Projekt erstellt hat, die Uni zu finden, zu der der Ersteller gehört.
Deshalb habe ich versucht:
<%= image_tag(creator_profile.project.university.logo.logo) %>
<div class="generaltext"><%= creator_profile.project.university.name %> </div>
Ich erhalte diesen Fehler:
undefined method `project' for #<Profile:0x007f998ada41b8>