PhonesController #create中的ActiveModel :: MassAssignmentSecurity :: Error

时间:2012-10-04 16:25:12

标签: ruby-on-rails ruby

现在我正在尝试构建一个能够搜索电话号码,购买它们并将事务记录到数据库的应用程序。

我认为这样做的方法是拥有两个控制器 - (1)find_numbers控制器接受参数并搜索数字。 (2)电话控制器购买所选号码并将参数保存到数据库。

这是我正在尝试做的图表。

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

在stackoverflower的帮助下,我能够修复一堆错误,但出于某种原因,当我从find_numbers / show发布到PhonesController #create时,我收到了错误

ActiveModel::MassAssignmentSecurity::Error in PhonesController#create

无法批量分配受保护的属性:: original_number,:name,:twilio_number

我认为这可能与我的表单布局方式有关,因为电话模型确实具有这些值的attr_accessible。

这是find_numbers / show form

<%= @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 %

这可能与在值

周围添加手机[]有关

这是PhoneController #Creve Action

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]”与此有关 - 尽管如果我们没有这样说,由于某种原因,创建操作不会理解:name属性POSTED是针对手机型号的。

非常感谢对此的任何帮助

1 个答案:

答案 0 :(得分:0)

我无法弄清楚为什么会发生这种情况,但我通过渲染手机/新手而使用form_for(@phone)而不是form_tag来避免这一切