Rails项目通过Twilio发送带记录链接的短信的实现问题
问题原因
你直接插值#{@job}输出的是Ruby实例对象的默认字符串表示,自然不是可用链接,而且你不需要用到media_url参数,这个参数仅用于发送彩信类的媒体附件,普通文本链接直接放到短信body内容里即可,手机会自动识别为可点击链接。
解决步骤
- 先配置Rails默认域名
要生成外网可访问的完整链接,需要先在对应环境的配置文件中设置默认域名:
- 生产环境
config/environments/production.rb增加配置:
config.action_controller.default_url_options = { host: "你的正式站点域名", protocol: "https" }
- 开发环境
config/environments/development.rb可配置为本地测试地址:
config.action_controller.default_url_options = { host: "localhost", port: 3000, protocol: "http" }
- 用路由辅助方法生成Job详情链接
Rails路由如果配置了resources :jobs(常规的RESTful资源配置),可以直接用job_url辅助方法生成带完整域名的访问链接(注意不要用job_path,后者只生成相对路径,无法在外网访问)。
修改控制器中的调用代码即可:
if job.save? job_link = job_url(@job) message = "#{@job.company} worker, you've got a new job. See it here: #{job_link}" TwilioClient.new.send_text(@job, message) end
可选优化
如果生成的链接过长,可以自行实现短链接跳转逻辑:给Job表增加一个短标识字段(比如用has_secure_token生成随机短串),配置短链路由指向Job详情页,短信里拼接短链即可。
内容的提问来源于stack exchange,提问作者PSCampbell
相关产品推荐
相关产品推荐

