Ruby on rails 用户图片的Rails助手

Ruby on rails 用户图片的Rails助手,ruby-on-rails,helpers,Ruby On Rails,Helpers,我目前在一个部分中有一些脏代码,我想把它移到一个助手那里会很好,但无法实现 以下是迄今为止我在“用户图片”部分的内容: <% if defined?(user) %> <%- if user.picture_id == 0 -%> <%= image_tag('/images/einstein.png', :size => size) -%> <%- else -%> <%= image

我目前在一个部分中有一些脏代码,我想把它移到一个助手那里会很好,但无法实现

以下是迄今为止我在“用户图片”部分的内容:

<% if defined?(user) %>
    <%- if user.picture_id == 0 -%> 
        <%= image_tag('/images/einstein.png', :size => size) -%>
    <%- else -%>
        <%= image_tag(user.picture.public_filename(:avatar), :size => size) %>
    <%- end -%>
<% else %>
    <%- if !logged_in_user || logged_in_user.picture_id == 0 -%> 
        <%= image_tag('/images/einstein.png', :size => size) -%>
    <%- else -%>
        <%= image_tag(logged_in_user.picture.public_filename(:avatar), :size => size) %>
    <%- end -%>
<% end %>

大小)->
尺寸)%%>
大小)->
尺寸)%%>
我如何让它成为助手


谢谢

将代码删除到
app/helpers/application\u helper.rb

def my_helper(user, size)
  if defined?(user)
    if user.picture_id == 0
      image_tag('/images/einstein.png', :size => size)
    else
      image_tag(user.picture.public_filename(:avatar), :size => size)
    end
  else
    if !logged_in_user || logged_in_user.picture_id == 0
      image_tag('/images/einstein.png', :size => size)
    else
      image_tag(logged_in_user.picture.public_filename(:avatar), :size => size) %>
    end
  end
end

然后从您的视图中调用:
my\u helper(当前用户,大小)

在我的头顶上,助手可以是:

def picture_for(user) #If you need to, pass size as a parameter or..
  if user.nil? or user.picture.nil?
    image_tag('/images/einstein.png', :size => size) # ..you need to define size somewhere in this helper
  else
    image_tag user.picture.public_filename(:avatar), :size => size
  end
end
您可以在部分中执行类似的操作:

if defined?(user)
  picture_for(user)
elsif logged_in_user
  picture_for(logged_in_user)
else
  picture_for(nil)
end

我假设您事先知道大小,但您也可以轻松地将其传递给助手

def user_picture_tag(user)
  return image_tag(user.picture.public_filename(:avatar), :size => "50x50") if user.present? && user.picture_id != 0
  image_tag('/images/einstein.png', :size => "50x50")
end
这样使用:(如果
logged\u-in\u-user
为nil,则可以)

user_picture_tag(logged_in_user)
# OR
user_picture_tag(@user)