Rails - 如何查找单个记录(用户名)在主页中向任何访问者显示它

问题描述 投票:0回答:2

在使用BS4和使用Devise的rails 5.1.6项目中,我试图解决以下问题。

我试图在主页中显示拥有项目的用户的名称。这不起作用。它返回一个名称错误:未定义的局部变量或方法`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>

该视图是部分的,在两个实例中呈现:

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-rails ruby devise ruby-on-rails-5
2个回答
0
投票

第一个错误:

undefined local variable or method `user'

可能是由于你的部分缺少@造成的:

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

一旦用户使用Devise登录到应用程序,您就可以通过调用current_user方法访问该用户。无需再次从数据库中获取用户(通过调用User.find...)。您可以将用户对象保存在实例变量中,如下所示:

@user = current_user

0
投票

我通过在create controller中添加:fullname to params解决了这个问题。以下内容指导我:Retrieve Username from User ID

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

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

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.