2012-03-06 30 views
0

我有這樣的代碼在我的控制器:爲什麼我可以接觸到新的創造方法回調控制器不工作對我來說

<%=link_to "Invite Friends", new_invitations_path, :remote =>true, :id => "invite_to_friends" %> 

class InvitationsController < ApplicationController 

before_filter :invitations_sent! 

def new 
#code here 
end 

def create 
#code here 
end 

    private 
    def invitations_sent! 
    if current_user.invitations.size > 1 
     return false 
     format.js { render :text => "you can not send more invitations" } 
    else 
    return true 
    end   
    end 
end 

我打電話跟法新如果我發送了3個邀請?

回答

0

我以前從未使用過遠程鏈接,因此我不確定該部分,但是如果您希望format.js { }能夠實際運行,那麼您肯定需要return falseformat.js { }之後。一旦ruby命中return語句,方法執行就會停止。

更新: 從你的評論中,你並沒有完全清楚你改變了什麼。但是,如果你想渲染髮生在所有的方法應該看起來像這樣:

def invitations_sent! 
    if current_user.invitations.size > 1 
    respond_to do |format| 
     format.js { render :text => "you can not send more invitations" } 
    end 
    return false 
    else 
    return true 
    end   
end 

沒關係,渲染塊不好。它應該包裹在像上面這樣的respond_to塊中。

+0

謝謝。你能否在問題中爲上述方法寫一個例子?非常感謝你! – hyperrjas 2012-03-06 16:33:15

+0

如果我這樣寫:'如果current_user.invitations.size> 1個 \t format.js \t回假 \t end'我得到的錯誤:**引發ArgumentError(太少參數)... ** – hyperrjas 2012-03-06 16:58:36

+0

該行認爲拋出錯誤是這樣的:'format.js {render:text =>「你不能發送更多的邀請」} 當這個條件滿足時返回false – hyperrjas 2012-03-06 17:15:47

0

我不知道答案,但我在想出來的第一步將是回答這些問題:

1)您之前過濾器實際上被調用?

2)是CURRENT_USER正確的,在過濾器?

3)是CURRENT_USER邀請是否正確?

4)是否return false真正得到執行?

您可以通過添加raise聲明或致電puts來查看過濾器中發生了什麼。

+0

謝謝,我在日誌中得到了對應的'current_user.invitations.size'。對於這種情況** 2 **。然後如果我可以在日誌中看到正確的'current_user.invitations.size'。爲什麼不解除條件的返回錯誤? :O型。如果我把方法'def invitations_sent! 返回false 結束沒有任何反應:O。在其他控制器工作正常這個過濾器對我來說 – hyperrjas 2012-03-06 16:26:24

0

這是另一種返回true/false的方法。

respond_to do |format| 
    format.js { render :nothing => true, :status => 200, :content_type => 'text/json' } 
end