ActiveRecord AssociationType不匹配

时间:2015-05-08 14:03:11

标签: ruby-on-rails-3 activerecord rails-activerecord

我有一个Rails 3.2.21应用程序,我在表单中添加了一个简单的表单/ collection_select字段。从下拉列表中选择对象(或将其留空)时,我收到以下错误:

ActiveRecord::AssociationTypeMismatch at /calls/5
BillFacility(#70179530126460) expected, got String(#70179505820040)

这是我的模特的样子:

call.rb

belongs_to :bill_facility
attr_accessible :bill_facility_id

bill_facility.rb

has_many :calls

这是我的表单:

_form.html.erb

<%= f.collection_select(:bill_facility_id, BillFacility.order("facility_name ASC"), :id, :facility_name, {:include_blank => true}, {:class => 'select'}) %>

以下是我添加BillFacility模型并将bill_facility_id添加到Call模型的迁移:

class CreateBillFacilities < ActiveRecord::Migration
  def change
    create_table :bill_facilities do |t|
      t.string :facility_name
      t.string :facility_address

      t.timestamps
    end
  end
end

class AddBillFaciltyIdToCalls < ActiveRecord::Migration
  def change
    add_column :calls, :bill_facility_id, :integer
  end
end

如果我在bill_facility_id中手动为呼叫分配了ID,则会收到未知的to_i方法错误。如果我手动将其设为零,则从下拉列表中选择BillFacilty(或将其留空)我会收到不匹配错误:

ActiveRecord::AssociationTypeMismatch at /calls/5
BillFacility(#70179530126460) expected, got String(#70179505820040)

我确信这很简单,我不知道。任何人对我在这里做错了什么都有任何想法?这有点早,所以我的思绪有点模糊,所以我应该等到我完全清醒,但想到我会寻求帮助。

如果您有任何疑问,请告诉我。

1 个答案:

答案 0 :(得分:0)

我想我已经弄明白了。绝对不够清醒,无法编写代码。

我在BillFacility collection_select

之前的表单中有这个
<%= f.label :Bill_Facility, "Bill Facility", class: "control-label" %><%= f.check_box :bill_facility, :id => 'bill_facility_checkbox' %>

所以我在我的数据库中调用名为bill_facility的字段,但由于bill_facility是关联模型,因此它给了我不匹配错误。所以我简单地改变了迁移以将check_box更改为bill_fac并且它有效。