首页 > 解决方案 > Rails - 如何查找单个记录(用户名)在主页中显示给任何访问者

问题描述

在使用 BS4 并使用 Devise 的 rails 5.1.6 项目上,我正在尝试解决以下问题。

我正在尝试在主页中显示拥有项目的用户的名称。这不起作用。它返回一个名称错误:未定义的局部变量或方法“用户”

控制器如下:

项目负责人:

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>

该视图是部分视图,在两种情况下呈现:

a) 在用户仪表板下:

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

用户的控制器显示:

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

这是有效的。

b) 第二个

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

无论我尝试什么,这个都行不通。我对在哪里寻找有一种感觉,但我似乎没有想法,并且希望能帮助我找到解决方案或解决这个问题的方法。提前致谢。

标签: ruby-on-railsrubydeviseruby-on-rails-5

解决方案


我通过在创建控制器的参数中添加 :fullname 解决了这个问题。以下指导我完成了: 从用户 ID 中检索用户名

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

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

谢谢


推荐阅读