2011-03-22 40 views
0

我目前在部分程序中有一些髒代碼,並認爲將它移動到幫助程序會很好,但無法實現。用戶圖片的Rails助手

以下是我在我的「user_picture」部分至今:

<% 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 %> 

如何使它成爲一個幫手?

謝謝!

回答

0

關閉我的頭頂,助手可能是:

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 
1

刪除你的代碼app/helpers/application_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_helper(current_user, size)

0

我假設你事先知道這個大小,但你也可以很容易地將它傳遞給幫助者。

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_in_user爲零)

user_picture_tag(logged_in_user) 
# OR 
user_picture_tag(@user)