我正在尝试创建一个可以在整个应用中使用的部分内容。当我尝试加载页面时,我收到此错误:
NameError in Home#index
Showing /home/ubuntu/workspace/app/views/shared/_avatar.html.erb where line #3 raised:
undefined local variable or method user for #<#<Class:0x007f9ce4f05ef0>:0x007f9ce5b9c920>
Extracted source (around line #3):
<div class="avatar-circle">
<span class="initials">
<%= user.full_name[0..1].upcase %>
</span>
</div>
这是我的代码: 应用程序/视图/家/ index.html.erb:
<%= show_avatar(post.user) %>
应用程序/控制器/关切/ users_helper.rb:
def show_avatar(user)
if user.avatar?
image_tag(user.avatar, class: 'avatar-circle')
else
render partial: 'shared/avatar', :user => user
end
end
应用程序/视图/共享/ _avatar.html.erb:
<%= user.full_name[0..1].upcase %>
应用程序/模型/ user.rb:
def full_name
return "#{first_name} #{last_name}".strip if (first_name || last_name)
end
如果有人能对此有所了解,我将不胜感激,非常感谢。
答案 0 :(得分:2)
如何才能真正做到这一点:
您可以在控制器的操作中创建实例变量。喜欢这个
class UsersController < ApplicationController
def show
@user = User.find_by(id: 1)
end
end
现在可以从视图@user
中使用 users/show.html.erb
变量
您可以从视图中呈现某些部分并将@user
变量传递给它:
<%= render partial: 'partial_name', locals: {user: @user}%>
答案 1 :(得分:1)
尝试更改您关注的这一行:
render partial: 'shared/avatar', locals: { user: user }
答案 2 :(得分:1)
要将变量传递给部分,您需要执行以下操作:
grub-update