0

我正在尝试遵循 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 %>
4

1 回答 1

0

在 Rails 中,这应该有效:

search_params = {}
%w(in_postal_code near_number contains).each do |p|
  search_params[p] = params[p] unless params[p].blank?
end

如果没有....您遇到什么错误?

于 2012-10-03T13:29:38.723 回答