0

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

私が考えた方法は、2 つのコントローラーを用意することでした。(1) find_numbers コントローラーはパラメーターを取り、数値を検索します。(2) 電話コントローラは選択された番号を購入し、パラメータをデータベースに保存します。

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

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

仲間のstackoverflowerの助けを借りて、一連のエラーを修正できましたが、何らかの理由で、find_numbers/showからPhonesController#createにPOSTすると、エラーが発生します

ActiveModel::MassAssignmentSecurity::Error in PhonesController#create

保護された属性を一括割り当てできません: :original_number、:name、:twilio_number

Phone Model にはこれらの値への attr_accessible があるため、フォームのレイアウト方法に関係している可能性があると思います。

これが find_numbers/show フォームです

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

    <%= form_tag(:controller => "phones", :action => "create" ) do %>
        <%= hidden_field "phone[:original_number]", params[:original_number] %>


    <%= hidden_field "phone[:name]", params[:name] %>
        <%= hidden_field "phone[:twilio_number]",  number.phone_number %>

        <div class="found_list">
            <div class="found_phone_number">
                <%= label_tag("phone[: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 %

値の周りに phone[] を追加することと関係があるかもしれません

これがPhoneController#Createアクションです

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

そして、これが電話モデルです

# == 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 :original_number, :user_id, :name, :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

フォームの「phone[:attribute]」がこれに関係していると思いますが、そのようにしないと、何らかの理由で create アクションが POSTED された :name 属性が電話モデルの場合。

これに関する任意の助けをいただければ幸いです

4

1 に答える 1

0

なぜこれが起こっているのか理解できませんでしたが、代わりにphones/newをレンダリングし、form_tagではなくform_for(@phone)を使用することで、すべて一緒に回避しました

于 2012-10-04T17:06:37.520 に答える