Rails-如何查找单个记录(用户名)在首页中显示给所有访问者

时间:2018-09-13 13:07:50

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

在带有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} %>

无论我怎样尝试,这都不起作用。我感觉到了要寻找的位置,但似乎没有任何想法,会很高兴能为我提供解决方案或方法论的帮助。 预先感谢。

2 个答案:

答案 0 :(得分:0)

第一个错误:

undefined local variable or method `user'

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

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

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

@user = current_user

答案 1 :(得分:0)

我通过在创建控制器的params中添加:fullname解决了这个问题。以下内容指导了我: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

谢谢