Rieles: cómo mostrar el atributo de un modelo asociado
Estoy tratando de hacer una aplicación en Rails 4.
Acabo de hacer esta pregunta relacionada y obtuve una respuesta clara. Parece que no puedo entender cómo tomar esa lógica y aplicarla en otro lugar.
Rails Cómo mostrar atributos de un objeto padre
Tengo un modelo de usuario, un modelo de perfil, un modelo de proyectos y un modelo de universidades.
Las asociaciones son:
Profile belongs to university
Profile belongs to user
University has many profiles
University has many projects
Projects HABTM user
Projects belong to universities
En mi controlador de proyectos, defino @creator de la siguiente manera:
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
Intento definir creator_profile de esta manera:
def show
#authorise @project
@project = Project.find(params[:id])
@creator = User.find(@project.creator_id)
@creator_profile = @creator.profile
end
En mi tabla uni, tengo atributos llamados logo y nombre. Utilizo el cargador de avatar en el que tengo un logotipo definido (es por eso que tengo dos .logo a continuación).
En mis proyectos, mostrar, quiero mostrar la universidad a la que pertenece el creador del proyecto.
He intentado esto:
<%= image_tag(@creator_profile.university.logo.logo) %>
<div class="generaltext"><%= @creator_profile.university.name %> </div>
Obtengo este resultado: método indefinido `logo 'para nil: NilClass
Basado en el enlace a mi problema anterior
<%= image_tag(creator_profile.university.logo.logo) %>
<div class="generaltext"><%= creator_profile.university.name %> </div>
Me sale este resultado:
undefined local variable or method `creator_profile' for #<#<Class:0x007f998f17ad88>:0x007f998d1ce318>
No estoy seguro de haber entendido las explicaciones muy detalladas dadas en la respuesta a mi pregunta anterior. Si la primera versión es correcta, entonces no entiendo la explicación en absoluto. Si la segunda versión es correcta, ¿por qué aparece este mensaje de error?
Me pregunto si el problema surge si no existe una asociación entre la universidad y el usuario. Esperaba, según el usuario que creó el proyecto, encontrar la unidad a la que pertenece el creador.
Por eso lo intenté:
<%= image_tag(creator_profile.project.university.logo.logo) %>
<div class="generaltext"><%= creator_profile.project.university.name %> </div>
Me sale este error:
undefined method `project' for #<Profile:0x007f998ada41b8>