2012-03-06 3 views
0

のための作品は、私は私のコントローラで、このコードを持っていません。コールバックは私

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 

私が使用して新しいメソッドを呼び出します。

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

なぜ私は新しいメソッドにアクセスして作成できます3つの招待状を送ったら?

答えて

0

私はその前にリモートリンクを使ったことがありませんでした。その部分についてはわかりませんが、format.js { }を実際に実行したい場合は、format.js { }の後にreturn falseが必要です。ルビが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 

レンダリングブロックが問題ありませんでした。上記のようにブロックにラップする必要があります。

+0

ありがとうございます。上記のメソッドの例を質問に書けますか?どうもありがとうございました! – hyperrjas

+0

私はこの記述する場合:私はエラーを取得する '場合current_user.invitations.size> 1 \t format.js \tリターン偽 \t end':**例外ArgumentError(少なすぎる引数)... ** – hyperrjas

+0

ラインをこの条件が満たされた場合、 'format.js {render:text =>"招待状をさらに送ることはできません "} falseを返します。 – hyperrjas

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! return false end'何も起こらない:O。他のコントローラでは、このフィルタは私のためにうまく動作します – hyperrjas

0

これは、true/falseを返す別の方法です。

respond_to do |format| 
    format.js { render :nothing => true, :status => 200, :content_type => 'text/json' } 
end 
関連する問題