使图像在所有页面中全局显示

时间:2016-06-14 05:55:42

标签: ruby-on-rails paperclip

我正在使用Paperclip + AWS S3 + Imagemagick作为图像。它在带有标签的www.example.com/users中完全正常工作(也许是因为我把Paperclip模型和控制器放在那里?)

<%= image_tag user.avatar.url(:small)%>

但是,相同的代码不会显示在其他页面中,例如www.example.com/conversations。

我收到一条错误说:

NameError in Conversations#show
undefined local variable or method `user' for #<#<Class:0x007f9c10d25010>:0x007f9c10c17ce0>

2 个答案:

答案 0 :(得分:0)

如果你使用设计进行身份验证,那么你应该这样做:

<%= image_tag current_user.avatar.url(:small)%>

如果您使用自己的身份验证,那么您应该在控制器中执行以下操作:

before_action: set_user
def set_user
  @user ||= User.find(session[:user_id]) # Or your criteria to set user
end

在html.erb文件中或可能在您的布局文件中

<%= image_tag @user.avatar.url(:small) %>

如果我这样做,那么我会这样做。

  1. 使用以下代码在 layouts / shared / _avatar.html.erb 中创建部分内容。
  2. <%= image_tag user.avatar.url(:small) %>

    1. 像我说的那样在控制器方法中添加befor_action: set_userset_user方法。

    2. 在布局中渲染部分(在步骤1中创建)或者当您需要通过将局部视图传递给部分来显示用户头像时。

    3. <%= render "layouts/shared/avatar", user: @user %>

答案 1 :(得分:0)

问题是我在对话控制器中为用户设置了不同的名称。 我所要做的就是改变

<%= image_tag user.avatar.url(:small)%> 

<%= image_tag participant.avatar.url(:small)%>