Rails - как показать атрибут связанной модели
Я пытаюсь сделать приложение в Rails 4.
Я только что задал этот связанный вопрос и получил четкий ответ. Кажется, я не могу понять, как взять эту логику и применить ее в другом месте.
Rails Как показать атрибуты из родительского объекта
У меня есть модель пользователя, модель профиля модели проекта и модели университетов.
Ассоциации являются:
Profile belongs to university
Profile belongs to user
University has many profiles
University has many projects
Projects HABTM user
Projects belong to universities
В контроллере моих проектов я определяю @creator следующим образом:
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
Я пытаюсь определить creator_profile следующим образом:
def show
#authorise @project
@project = Project.find(params[:id])
@creator = User.find(@project.creator_id)
@creator_profile = @creator.profile
end
В моей унифицированной таблице у меня есть атрибуты, называемые логотипом и именем. Я использую загрузчик аватаров, в котором я определил логотип (вот почему у меня есть два .logo ниже).
В моих проектах, show, я хочу отобразить университет, к которому принадлежит создатель проекта.
Я пробовал это:
<%= image_tag(@creator_profile.university.logo.logo) %>
<div class="generaltext"><%= @creator_profile.university.name %> </div>
Я получаю этот результат: неопределенный метод `logo 'для nil: NilClass
На основании ссылки на мою проблему выше
<%= image_tag(creator_profile.university.logo.logo) %>
<div class="generaltext"><%= creator_profile.university.name %> </div>
Я получаю этот результат:
undefined local variable or method `creator_profile' for #<#<Class:0x007f998f17ad88>:0x007f998d1ce318>
Я не уверен, что понял очень подробные объяснения, данные в ответе на мой предыдущий вопрос. Если первая версия верна, то я вообще не понимаю объяснения. Если вторая версия верна, то почему появляется это сообщение об ошибке?
Мне интересно, если проблема возникает из-за отсутствия связи между университетом и пользователем? Я надеялся, основываясь на пользователе, который создал проект, найти универ, к которому принадлежит создатель.
Вот почему я пытался:
<%= image_tag(creator_profile.project.university.logo.logo) %>
<div class="generaltext"><%= creator_profile.project.university.name %> </div>
Я получаю эту ошибку:
undefined method `project' for #<Profile:0x007f998ada41b8>