如何将实例发送到Rails中的部分

时间:2017-01-19 20:30:04

标签: ruby-on-rails debugging web-applications compiler-errors

我正在尝试创建一个可以在整个应用中使用的部分内容。当我尝试加载页面时,我收到此错误:

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

如果有人能对此有所了解,我将不胜感激,非常感谢。

3 个答案:

答案 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