2017-03-09 16 views
0

我有以下看法 Rails的重構視圖

<div class='post-helpers'> 
    <% if current_user.id == @post.user_id %> 
    <%= button_to 'Edit', edit_post_path(@post), class: 'btn', tabindex: 1 %> 
    <%= button_to 'Delete', @post, class: 'btn', tabindex: 2, method: :delete %> 
    <% end %> 
</div> 

current_user.id == @something.user_id在很多地方,所以我試圖將其搬走的application_helper使用。 這怎麼辦?

PS:該幫手需要重複使用,不應只依賴於@post

回答

0
def owner?(object) 
    current_user && current_user.id == object.user_id 
end 

,那麼也可以把它更普遍,並允許檢查規則current_user但對於任何用戶:

def owner?(object, user = nil) 
    user ||= current_user 
    user && user.id == object.user_id 
end 

使用

<div class='post-helpers'> 
    <% if owner?(@post) %> 
    <%= button_to 'Edit', edit_post_path(@post), class: 'btn', tabindex: 1 %> 
    <%= button_to 'Delete', @post, class: 'btn', tabindex: 2, method: :delete %> 
    <% end %> 
</div> 
+0

感謝您的幫助) 根據文章中,我已閱讀,如果我需要在視圖中使用任何類型的Ruby,它應該是這樣的事情: 1.遍歷對象列表 2.調用Model對象上的屬性來顯示它的值 3.任何種類的表格 4.渲染視圖 所以,我的問題是:有沒有辦法將所有邏輯evenif語句移出視圖? –

+0

真的,沒有。但是你可以使用partials,helpers或者像drapper,gem這樣的寶石來讓你的代碼乾燥無效並嵌套'if' –