我有一种情况,我需要阻止用户显式调用say/town/addBuilding。 Town是我的控制器,addBuilding是执行的动作。防止用户在Rails中直接执行控制器动作
现在,这个动作应该只在我的程序代码中执行,而不是由用户请求执行它。而且,这个动作像回调一样执行。在我的application_controller中,当满足一些条件时,控制器动作被触发并且有重定向。在php中,一个简单的守卫就像定义一个守卫并检查它就足够了。在rails中是否有相同的东西,如果是的话,实现它的最好方法是什么?
感谢名单的阅读,我感谢你的帮助:)
编辑:我粘贴一些代码,以使其更清晰,注意/镇/ addBuilding就是一个例子,下面的控制器名称和动作名称不同。
现在,这是实际的应用程序控制器代码,它是我编码的浏览器游戏的一部分。
def checkQuest
if TavernQuest.hasQuest(current_user)
quest = TavernQuest.getQuest(current_user)
if quest.end_time < Time.now # get quest info and check if the quest has been completed
TavernQuest.deleteQuest(current_user)
redirect_to :controller => 'tavern', :action => 'monsterAttack'
end
end
end
小酒馆控制器动作就是,我要执行明码,但前提是重定向发生在应用控制器内。
你好Jasdeep和thanx的真正快速回复。 问题是,我重定向到像redirect_to:controller =>'town',:action =>'通过我的application_controller添加构建(通过回调,如我在第一篇文章中提到的),因此私有,受保护的不工作。before_filter可以工作,但会在模型内部进行重定向(通过method_name我的意思是,因为我最终必须调用addbuilding)。我会看看,thanx :) – Spyros 2010-11-24 03:40:08
没问题Spyros,确实需要一些时间来标记这个答案为接受的情况下,它为你工作.. :) – 2010-11-24 03:41:08