2011-10-24 61 views
2

在我的用戶模型中,我有一堆屬性,如is_foos_admin和is_bars_admin,用於確定用戶允許編輯哪些類型的記錄。方法調用中的插值Ruby?

我想幹出我的編輯鏈接,目前看起來是這樣:

<%= link_to 'Edit', edit_foo_path(foo), :class => 'edit' if current_user.is_foos_admin? %> 
... 
<%= link_to 'Edit', edit_bar_path(bar), :class => 'edit' if current_user.is_bars_admin? %> 

我想打個幫手,讓我傳遞一個Foo或酒吧,並得到一個鏈接編輯它,像這樣:

<%= edit_link_for(foo) %>

助手可能是這樣的(不工作)

def edit_link_for(thing) 
    if current_user.is_things_admin? 
    link_to 'Edit', edit_polymorphic_path(thing), :class => 'edit' 
    end 
end 

模型不可知的edit_polymorphic_path方法讓我在那裏一半,但它是「is_things_admin」方法,我不知道如何通用。如果我可以在助手內部使用內插的Ruby,我想要做一些類似於

if current_user.is_#{thing.class.name.downcase.pluralize}_admin? 

但是當然這是行不通的。有任何想法嗎?

回答

8

嘗試使用send

if current_user.send("is_#{@model}_admin?") 
+0

的send()的伎倆精確!如果current_user.send(「是_#{thing.class.table_name} _admin?」),那麼我的幫助器的條件行變成' –