我的控制器中有这个代码:
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
我用以下方法调用new方法:
<%=link_to "Invite Friends", new_invitations_path, :remote =>true, :id => "invite_to_friends" %>
为什么我可以访问新方法并创建如果我已发送3个邀请?
答案 0 :(得分:0)
我不知道答案,但我解决这个问题的第一步是回答这些问题:
1)您的前置过滤器是否实际被调用?
2)过滤器中的current_user是否正确?
3)current_user邀请是否正确?
4)return false
实际上是否被执行了?
您可以通过添加raise
语句或致电puts
来查看过滤器中发生的情况。
答案 1 :(得分:0)
之前我从未使用过远程链接,因此我不确定该部分,但如果您希望return false
实际运行,那么format.js { }
肯定需要format.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
块中。
答案 2 :(得分:0)
这是返回true / false的另一种方法。
respond_to do |format|
format.js { render :nothing => true, :status => 200, :content_type => 'text/json' }
end