現在、電話番号を検索して購入し、トランザクションをデータベースに記録する機能を持つアプリを構築しようとしています。
私が考えた方法は、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 属性が電話モデルの場合。
これに関する任意の助けをいただければ幸いです