2014-10-07 76 views
2

我在我的應用程序控制器中有這兩個方法,我想要的是將它們用作我的projects_controller中的回調,但它給了我錯誤,誰能告訴我如何解決此問題。將參數傳遞給控制器​​中的回調

before_action :permit_show(@project), only:[:show] 
before_action :permit_edit(@project), only:[:edit] 



def permit_edit(object) 
    if (current_user.id != object.creator_id) 
    render_404 
    end 
end 

def permit_show(object) 
members = object.users 
if (!members.include? current_user) 
    render_404 
end 
end 

回答

5

要傳入參數,必須使用塊。

before_filter(only: [:show]) { permit_show(@project) } 
before_filter(only: [:edit]) { permit_edit(@project) } 
+0

非常感謝,它的工作。 – 2014-10-07 16:56:46

+1

有什麼方法可以將該塊傳遞給skip_before_action以跳過該回調? – Jeremen 2015-07-31 13:35:32

1

您可以使用send方法來傳遞參數是這樣的 -

before_action only: [:show] do |c| 
    c.send(:permit_show, @project) 
end 

before_action only: [:edit] do |c| 
    c.send(:permit_edit, @project) 
end 
+1

在這種情況下你不需要發送,只需'permit_edit(@project)'也可以。 – 2014-10-07 17:00:19

+0

是的,它應該工作... :) – LHH 2014-10-07 17:01:30

1

感謝this so answer


...你可以實現你通過可選的方法參數,像這樣找什麼:

def cache_bust(callback = true) 
    ... method body 
end 

在場景的方法是從after_update回調調用,參數沒有通過,但默認爲true。否則,如果方法是從其他地方「手動」調用的,則可以選擇將任意值傳遞給該方法。

相關問題