Rails - Как найти отдельную запись (имя пользователя) показать ее на домашней странице любому посетителю - PullRequest
0 голосов
/ 13 сентября 2018

В проекте rails 5.1.6 с BS4 и с использованием Devise я пытаюсь решить следующую проблему.

Я пытаюсь отобразить имя пользователя, которому принадлежит проект, на домашней странице. Это не работает. Возвращает ошибку имени: неопределенная локальная переменная или метод `user '

Контроллеры следующие:

Контроллер проекта:

def create
   @project = current_user.projects.build(project_params)
end

Контроллер домашней страницы показывает следующее:

def home
 @projects = Project.where(publish: true).limit(8)
end

Если я пытаюсь добавить на страницы контроллер @users = User.find (params [: user_id]) Это не работает. (Запись не найдена / Не удалось найти пользователя с «id» =)

(усеченное) представление выглядит следующим образом:

    <div class="card-row border-top d-flex">
      <div class="card2-post__author d-flex">
          <img class="card2-project-author-avatar"
        <%= image_tag avatar_url(@user), class: "avatar-small" %></img>
        <div class="d-flex flex-column justify-content-center ml-3">
          <span class="card2-project-author-name"><%= user.fullname %></span>
      </div>
    </div>

Это представление с частичным отображением в двух случаях:

а) под панелью пользователя с:

<%= render partial: "projects/projects_list", locals: {user: current_user, projects: @projects} %>

контроллер для пользователя показывает:

def show
 @user = User.find(params[:id])
 @projects = @user.projects
end

Это работает.

б) второй

<%= render partial: "projects/projects_list", locals: {user: current_user, projects: @projects} %>

Этот не работает, что бы я ни пытался. Я чувствую, где искать, но я, кажется, застрял без идей и был бы признателен за помощь, которая укажет мне на решение или методологию для решения этой проблемы. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Я решил это, добавив: полное имя в params в контроллере создания. Следующие инструкции помогли мне: Получить имя пользователя с идентификатором пользователя

def create
  ...
  @project = current_user.projects.build(project_params)
  ...
end

private
  def project_params
    params.require(:project).permit(...:fullname)
end

Спасибо

0 голосов
/ 13 сентября 2018

Первая ошибка:

undefined local variable or method `user'

, вероятно, вызвана отсутствием @ в вашей части:

<span class="card2-project-author-name"><%= user.fullname %></span>

Как только пользователь вошел в приложение с помощью Devise, у вас естьдоступ к этому пользователю путем вызова метода current_user.Нет необходимости снова извлекать пользователя из базы данных (вызывая User.find...).Вы можете сохранить объект пользователя в переменной экземпляра следующим образом:

@user = current_user
...