ruby-on-rails – RoR:多态控制器
我有一个现有的网站,有一堆不同的模型和控制器.我目前正在将Twilio的服务整合到这个网站中. Twilio允许您提供当用户使用手机与您的电话号码交互时将被呼叫的网址.不幸的是,只有一个url可以提供给Twilio,然后所有解析都在你的最后完成.
所以,现在我有一个twilio控制器,它解析用户的数据并决定他们想要做什么. 用户可能通过手机尝试做的一切都可以在网站上完成,但现在他们可以选择在旅途中使用手机.如果他们将我的号码“创建群组foo”发送,那么该网站将尝试相应地创建群组.我的问题是我已经拥有一个知道如何创建组的组控制器,并且具有相应的before_filters以确保用户有权这样做,以及其他事项. 有没有办法让twilio控制器解析请求,然后以某种方式将其“转发”到适当的控制器?我宁愿没有twilio控制器复制所有其他控制器中的所有代码和过滤器,并且其中一些东西不适合被推入模型中. 一般来说我对rails很新,所以我对任何建议持开放态度.我希望有一些适合我的用例的设计模式,我愿意为我的整个项目重构正确的解决方案. 解决方法
我想你可以做几件事.如果您不必以特定格式进行响应,则可以使用适当格式化的参数重定向请求.例如:
class TwilioController def create if params[:twilio_action] == 'create group' redirect_to create_group_path(:id => params[:group_id],:number => params[:number]) end end end 您很可能会遇到身份验证问题,因为twilio api不会为您发送和接收Cookie,因此您将不会拥有经过身份验证的用户.如果是这种情况,最好将所有共享代码放入模型中,并使用TwilioController通过GroupsController和电话号码身份验证处理cookie身份验证.例如: class TwilioController def create if params[:twilio_action] == 'create group' if can_create_group?(params[:phone_number]) Group.create(:id => params[:group_id]) end end end end 最好将您的业务逻辑放在您的模型中,但如果您实际上有一个想要在两个控制器中共享的功能,您也可以创建一个模块来执行此操作: module GroupControllerActions def create_group user Group.create(params[:group].merge({:user => user})) end end class TwilioController include GroupControllerActions def create if params[:twilio_action] == 'create group' create_group(User.find_by_number(params[:phone_number])) end end end class GroupsController def create create_group(current_user) end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |