0

几天来,我一直在努力解决这个问题。我不断收到错误:

ActiveRecord::AssociationTypeMismatch in SatellitesController#create

Satellite(#70098878574220) expected, got String(#70098849353340)

我已经浏览了这个网站,但似乎没有任何帮助。到目前为止,这是我的代码中的内容:

在我的 new.html.erb 文件中:

<%= form_for( @satellite ) do |f| %>
<div class="field">
    <%= f.label :parent_id %></br>
    <%= f.select( :parent_id, Satellite.all.collect { |s| [ s.name, s.id ] }, { :include_blank => '-select-' } ) %>
</div>

这是我正在使用的关联:

class Satellite < ActiveRecord::Base

  validates :name, :presence => true, :uniqueness => true

  has_many :satellites, class_name: 'Satellite', foreign_key: 'parent_id'
  belongs_to :parent_id, class_name: 'Satellite', foreign_key: 'parent_id'
end

任何帮助将不胜感激!

4

1 回答 1

0

不确定它是否与为什么使用 select 而不是 collection_select 相关?

<%= f.select( :parent_id, Satellite.all.collect { |s| [ s.name, s.id ] }, { :include_blank => '-select-' } ) %>

可能

<%= f.collection_select :parent_id, Satellite.all, :id, :name, { :include_blank => true } %>

看起来在模型的自引用部分中对您父级的引用可能是错误的。

belongs_to :parent_id, class_name: 'Satellite', foreign_key: 'parent_id'

我认为这应该是

belongs_to :satellites, class_name: 'Satellite', foreign_key: 'parent_id'
于 2013-03-17T07:17:02.270 回答