Ruby on rails 控制器中的回调对我不起作用
我的控制器中有以下代码:Ruby on rails 控制器中的回调对我不起作用,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我的控制器中有以下代码: 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 fa
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个邀请,为什么我可以访问new和create方法 我不知道答案,但我想知道答案的第一步是回答以下问题: 1实际调用的是您的before筛选器吗 2过滤器中当前用户是否正确 3当前用户邀请是否正确 4返回false是否实际执行
您可以通过向puts添加raise语句或调用来查看过滤器中发生的情况。我以前从未使用过远程链接,所以我不确定这部分,但如果您希望format.js{}实际运行,您肯定需要在format.js{}之后返回false。一旦ruby命中返回语句,方法执行就会停止 更新: 你的评论并不完全清楚你改变了什么。但如果您希望渲染发生,则该方法应如下所示:
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_块中。这是返回true/false的另一种方法
respond_to do |format|
format.js { render :nothing => true, :status => 200, :content_type => 'text/json' }
end
谢谢,我在日志中获得了正确的当前_user.investments.size。对于本例2。然后,如果我能在日志中看到正确的当前_user.investments.size。为什么不触发条件的返回false?:O.如果我输入方法def,请发送邀请!返回false end无任何情况发生:O。在其他控制器中工作良好,此过滤器适用于甲烷储罐。你能在问题中为上述方法写一个例子吗?。非常感谢你!如果我这样写:如果当前_user.investments.size>1 format.js返回false结束,我会得到错误:ArgumentError参数太少…引发错误的行是这样的行:format.js{render:text=>您不能发送更多邀请}当满足此条件时返回false