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