Railsを学ぶために、ユーザーがTwilioを介して電話番号を購入できるアプリを作成しようとしています。最初は、これを実現するために2つのモデルから始めました。ユーザーhas_manyの電話番号、およびphone_numbersはユーザーに属します。私はこの部分を処理したと思いますが、私が混乱しているのは、
(1)電話番号の検索(2)その番号を選択したら、それをフォームに入力して、他の情報と一緒にデータベースにプッシュします。
私はそれを理解しようとこのドキュメントを見ています-http ://www.twilio.com/docs/howto/search-and-buy
しかし、それは軽いルビーのフレームワークであるシナトラで書かれており、私が経験したほとんどの経験は、マイケル・ハートルのRailsに関する本を完成させることです。コントローラとビューのメッシュは本当に混乱しています。
それを見て、新しいコントローラー、たとえばfind_numbersを作成する必要があると思いました。これには、new、create、およびshowアクションがあります。createアクションは、phone_numbersコントローラーの新しいアクションをレンダリングし、データベースに投稿します。
しかし、ここに注意が必要です。データベースにない情報のフィールドを別のビューに移動する方法がわかりません。
たとえば、find_numbersビューにこれがあるとします
<form method="POST">
<label>near US postal code (e.g. 94117): </label><input type="text" size="4" name="in_postal_code"/><br/>
<label>near this other number (e.g. +4156562345): </label><input type="text" size="7" name="near_number"/><br/>
<label>matching this pattern (e.g. 415***EPIC): </label><input type="text" size="7" name="contains"/><br/>
<input type="submit" value="SEARCH"/>
</form>
これらはデータベース値ではないため、これらをパラメーターとして使用して数値を一覧表示するように、作成アクションをどのように指示しますか?作成アクションのために、彼らがシナトラで書いたものは次のとおりです
post '/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
end
誰かが私がこのコードを分解するのを手伝ってもらえますか?のように、作成ビューには何が含まれ、作成アクションには何が含まれますか?私の新しい見方は大丈夫ですか?
その後、phone_numberコントローラーの新しいアクションにどの電話番号を使用するかを伝える方法は、/ phone_number = 123123123のようにURLに追加することであると思います。これにより、フィールドにデータが入力され、Twilioにそこから購入させることができます。 。しかし...上部は私にとって本当に混乱しています...
これをどのように実装しますか?
私の試みはこんな感じでした-
作成アクションの場合
def create
@user = current_user
client = Twilio::REST::Client.new(current_user.twilio_account_sid, current_user.twilio_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
local_numbers = client.account.available_phone_numbers.get('US').local
@numbers = local_numbers.list(search_params)
end
ビューの作成用
<%= numbers.each do |number| %>
<form method='POST' action='/buy-number'>
<label><%=number.friendly_name %></label>
<input type='hidden' name='PhoneNumber' value='#{number.phone_number}' />
<input type='submit' value='BUY' /></form>
<% end %>
しかし、私はエラーを受け取ります
undefined local variable or method `numbers' for #<#<Class:0x597cc48>:0x5979570>