0

現在、電話番号を検索して購入し、トランザクションをデータベースに記録する機能を持つアプリを構築しようとしています。

(1) find_numbers コントローラーはパラメーターを取り、数値を検索します。(2) 電話コントローラは選択された番号を購入し、パラメータをデータベースに保存します。

これが私がやろうとしていることの図です。

http://www.stepanp.com/search-and-buy.jpg

番号を検索して番号を購入することはできますが、データベースに保存できないようです。

リダイレクトされ、適切なフィールドに入力しなかったことが通知されます。

これは、find_numbers フォームのパラメーターが電話コントローラーの作成アクションのパラメーターとして受け入れられていないと思わせます。

これが find_numbers/show です

    <%= @numbers.each do |number| %>

        <%= form_tag(:controller => "phones", :action => "create" ) do %>
            <%= hidden_field :original_number, params[:original_number] %>
            <%= hidden_field :name, params[:name] %>
            <%= hidden_field(:twilio_number,  number.phone_number) %>

            <div class="found_list">
                <div class="found_phone_number">
                    <%= label_tag(:number, number.friendly_name) %>
                </div>
                <div class="choose_found_number">
                 <%= submit_tag("Choose This Number", :class => "btn btn-large btn-success") %>
                </div>
            </div>
                <hr>
        <% end %>
    <% end %>

そして、電話コントローラーの作成アクションは次のとおりです。

  def create
    @user = current_user
    @phone = @user.phones.build(params[:phone])
    client = Twilio::REST::Client.new(@user.twilio_account_sid, @user.twilio_auth_token)
    number = client.account.incoming_phone_numbers.create(
                   :phone_number => params[:twilio_number])
    if @phone.save && !number.nil?
      flash[:success] = "Phone Number Created!"
      redirect_to user_path
    else
      render new_find_number_path
      flash[:error] = "It looks like there were errors with the submission"
    end
  end

create アクションで何を編集して、show アクションが POSTS するパラメータを取り、それをデータベースに保存するようにする必要がありますか?

これが犯人かもしれないと思います:

@phone = @user.phones.build(params[:phone])

ここまで付き合ってくれてありがとう!どんなガイダンスでも大歓迎です

これは、find_numbers/show 経由で Phones#create を実行したときのデバッガ情報です。

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: ✓
authenticity_token: RMvjP9PQt9hVEJE449pMqgqnFcreqvXtmZFEyU+641g=
original_number: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  '1231231234': ''
name: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  Example Name: ''
twilio_number: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  '+18322415354': ''
commit: Choose This Number
action: create
controller: phones

電話モデル

# == Schema Information
#
# Table name: phones
#
#  id              :integer          not null, primary key
#  name            :string(255)
#  twilio_number   :string(255)
#  original_number :string(255)
#  user_id         :integer
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#

class Phone < ActiveRecord::Base
      attr_accessible :name, :original_number, :twilio_number
      belongs_to :user

  validates :name, presence: true
  validates :twilio_number, presence: true
  validates :original_number, presence: true
  validates :user_id, presence: true

  default_scope order: 'phones.created_at DESC'

end

http://stepanp.com/search-and-buy-debug.jpg

4

1 に答える 1

0

これを試して

def create
    @user = current_user
    @phone = @user.phones.new(params[:phone])
    client = Twilio::REST::Client.new(@user.twilio_account_sid, @user.twilio_auth_token)
    number = client.account.incoming_phone_numbers.create(
                   :phone_number => params[:twilio_number])
    if @phone.save && number.present?
      flash[:success] = "Phone Number Created!"
      redirect_to user_path
    else
      render new_find_number_path
      flash[:error] = "It looks like there were errors with the submission"
    end
end
于 2012-10-04T14:45:51.223 に答える