正如标题所暗示的那样——在 Heroku 的生产环境中出现了一个异常,即使我使用 find_by_id 也是如此。我不确定原因是什么,但我已经使用 abegin/ensure
来规避这个问题,但我仍然遇到问题。
这是我最初的解决方案:
def select_location
begin
region = Region.find_by_id(params[:Digits])
ensure
Twilio::TwiML::Response.new do |r|
# if user pressed "9" (redirect)
if (params[:Digits] == '0')
@response = r.Redirect call_hq_path, method: 'GET'
# if region does not exist
elsif !region.id
@response = r.Play Clip.where(name: "invalid").first.url
@response = r.Redirect index_path, method: 'GET'
else
@response = r.Gather action: location_description_path(region), numDigits: '1' do |g|
region.locations.order(:number).each do |location|
g.Play location.listing_clip.url
g.Play number_url(location.number)
end
g.Play Clip.where(name: "9toreturn").first.url
end
end
end
end
render :xml => @response
end
这里的问题在于elsif !region.id
- 我仍然遇到这个错误:
2013-10-18T01:29:14.524289+00:00 app[web.1]: NoMethodError (undefined method `id' for nil:NilClass):
所以,我的两个问题:
- 是
begin/ensure
绕过这个问题的最好方法吗? - 如果是,我该如何解决这个
elsif
问题?
更新
.id
从-删除后,elsif
我收到此错误:
2013-10-18T02:06:57.055617+00:00 app[web.1]: NoMethodError (undefined method `url' for nil:NilClass):
elsif
不开火怎么办?