Rails - como mostrar o atributo de um modelo associado
Estou tentando criar um aplicativo no Rails 4.
Acabei de fazer esta pergunta relacionada e obtive uma resposta clara. Parece que não consigo entender como pegar essa lógica e aplicá-la em outro lugar.
Rails Como mostrar atributos de um objeto pai
Eu tenho um modelo de usuário, modelo de perfil, modelo de projetos e modelo de universidades.
As associações são:
Profile belongs to university
Profile belongs to user
University has many profiles
University has many projects
Projects HABTM user
Projects belong to universities
No meu controlador de projetos, defino @creator da seguinte maneira:
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
Eu tento definir creator_profile assim:
def show
#authorise @project
@project = Project.find(params[:id])
@creator = User.find(@project.creator_id)
@creator_profile = @creator.profile
end
Na minha tabela uni, tenho atributos chamados logo e nome. Eu uso o avatar uploader no qual tenho o logotipo definido (é por isso que tenho dois .logo abaixo).
Nos meus projetos, show, quero exibir a universidade à qual o criador do projeto pertence.
Eu tentei isso:
<%= image_tag(@creator_profile.university.logo.logo) %>
<div class="generaltext"><%= @creator_profile.university.name %> </div>
Eu recebo este resultado: método indefinido `logo 'para nil: NilClass
Com base no link para o meu problema acima
<%= image_tag(creator_profile.university.logo.logo) %>
<div class="generaltext"><%= creator_profile.university.name %> </div>
Eu recebo este resultado:
undefined local variable or method `creator_profile' for #<#<Class:0x007f998f17ad88>:0x007f998d1ce318>
Não sei se entendi as explicações muito detalhadas fornecidas na resposta à minha pergunta anterior. Se a primeira versão estiver correta, não entendo a explicação. Se a segunda versão estiver correta, por que essa mensagem de erro aparece?
Eu estou querendo saber se o problema surge de não haver uma associação entre universidade e usuário? Eu esperava, com base no usuário que criou o projeto, encontrar a unidade à qual o criador pertence.
Por isso tentei:
<%= image_tag(creator_profile.project.university.logo.logo) %>
<div class="generaltext"><%= creator_profile.project.university.name %> </div>
Eu recebo este erro:
undefined method `project' for #<Profile:0x007f998ada41b8>