加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – RoR:多态控制器

发布时间:2020-12-17 02:28:28 所属栏目:百科 来源:网络整理
导读:我有一个现有的网站,有一堆不同的模型和控制器.我目前正在将Twilio的服务整合到这个网站中. Twilio允许您提供当用户使用手机与您的电话号码交互时将被呼叫的网址.不幸的是,只有一个url可以提供给Twilio,然后所有解析都在你的最后完成. 所以,现在我有一个twil
我有一个现有的网站,有一堆不同的模型和控制器.我目前正在将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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读