我正在尝试遵循 Twilio 的本教程-> http://www.twilio.com/docs/howto/search-and-buy
但是,它是用 Sinatra 编写的,我在尝试将其转换为 Rails 时感到困惑。
我想将其转换为两个操作,:创建和:显示,具有各自的视图
filespost '/search-numbers' do
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
auth_token = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'
client = Twilio::REST::Client.new(account_sid, auth_token)
search_params = {}
%w[in_postal_code near_number contains].each do |p|
search_params[p] = params[p] unless params[p].nil? || params[p].empty?
end
begin
local_numbers = client.account.available_phone_numbers.get('US').local
numbers = local_numbers.list(search_params)
unless numbers.empty?
out = '<html><head><title>Choose a number</title></head><body><h3>Choose a number</h3>'
numbers.each do |number|
out << "<form method='POST' action='/buy-number'>"
out << "<label>#{number.friendly_name}</label>"
out << "<input type='hidden' name='PhoneNumber' value='#{number.phone_number}' />"
out << "<input type='submit' value='BUY' /></form>"
end
out << '</body></html>'
else
'<b>Sorry!</b> Twilio doesn\'t have any numbers available that match those constraints.'
end
rescue StandardError => e
'<b>Sorry!</b> ' + e.message + '.'
end
结尾
所以,我的想法是创建一个 find_numbers 控制器,带有 new、create 和 show。新的只是一种与数据库没有联系的表格。Create 动作应该创建一个数字数组,并且 show 动作应该显示它们。
我在这里感到困惑`第一个困惑是这个,我猜这会进入创建操作->
search_params = {}
%w[in_postal_code near_number contains].each do |p|
search_params[p] = params[p] unless params[p].nil? || params[p].empty?
end
`
我不确定这是否适用于 Rails 控制器。
其余的,我猜会进入 show 动作,但这里的问题是,show 动作如何能够调用 search_params?
我已经调整了几个小时,任何指导将不胜感激!!!
更新
在了解了有关表单如何在 Rails 中工作的更多信息后,我尝试将此代码移至新控制器“find_numbers”,其中包含新操作、创建操作和显示操作。Show show 给出错误:
NoMethodError in Find_numbers#create
Showing C:/Sites/dct/app/views/find_numbers/show.html.erb where line #1 raised:
undefined method `each' for nil:NilClass
我在想这是因为 numbers 实例变量是 nil,因为它之前的某些东西不起作用。
这是我的控制器:
类 FindNumbersController < ApplicationController
def new
@user = current_user
end
def create
@user = current_user
render 'find_numbers/show'
end
def show
@user = current_user
client = Twilio::REST::Client.new(@user.twilio_account_sid, @user.twilio_auth_token)
search_params = {}
%w(in_postal_code near_number contains).each do |p|
search_params[p] = params[p] unless params[p].blank?
end
local_numbers = client.account.available_phone_numbers.get('US').local
@numbers = local_numbers.list(search_params)
end
结尾
请注意,我所知道的是 current_user 变量有效。我认为在 search_params 之后的某个时候它会变得混乱
我的节目视图
<%= number.friendly_name %>
<%= number.phone_number %>