0

nameと の 2 つの列を持つ CSV をインポートしていますboro

開発でインポートを実行すると、正常に動作します。しかし、Heroku で本番環境で実行すると、次のエラーが発生します。

2013-02-13T07:53:43+00:00 app[web.1]: Started POST "/neighborhoods/import" for xx.xx0.xx.xx at 2013-02-13 07:53:43 +0000
2013-02-13T07:53:43+00:00 app[web.1]: 
2013-02-13T07:53:43+00:00 app[web.1]: ActiveRecord::AssociationTypeMismatch (Boro(#52915220) expected, got String(#18916260)):
2013-02-13T07:53:43+00:00 app[web.1]:   app/models/neighborhood.rb:20:in `block in import'
2013-02-13T07:53:43+00:00 app[web.1]:   app/models/neighborhood.rb:19:in `import'
2013-02-13T07:53:43+00:00 app[web.1]:   app/controllers/neighborhoods_controller.rb:85:in `import'
2013-02-13T07:53:43+00:00 app[web.1]: 
2013-02-13T07:53:43+00:00 app[web.1]: 

これは私のmodels/neighborhood、またはむしろエラーで言及されている行です:

  def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
      neighborhood = where(name: row["name"]).first_or_create!(row.to_hash.slice(*accessible_attributes))
      boro = Boro.find_by_name(row["boro"])
      neighborhood.boro = boro      
      neighborhood.save!
    end
  end  

これは私のcontrollers/neighborhood#importです:

def import
  Neighborhood.import(params[:file])
  redirect_to imports_index_url, notice: "Neighborhoods imported."
end

これは、両方のモデル間の関連付けです。

Neighborhood belongs_to :boro Boro has_many :neighborhoods

これは近隣のスキーマです。

# Table name: neighborhoods
#
#  id         :integer          not null, primary key
#  name       :string(255)
#  created_at :datetime         not null
#  updated_at :datetime         not null
#  boro_id    :integer

これは、Boro のスキーマです。

# Table name: boros
#
#  id         :integer          not null, primary key
#  name       :string(255)
#  created_at :datetime         not null
#  updated_at :datetime         not null

考え?

4

1 に答える 1

0

したがって、私が抱えていた問題は、:boro, :boro_idアクセス可能な属性と、その属性を更新する方法の両方に関係していたようです。

リストから削除:boroしたらattr_accessible

attr_accessible :name, :listing_ids, :boro_id

それを変更し、使用しようとしなかった場合update_attributes(これも行っていました)、上記のコードは正常に動作します。

于 2013-02-13T10:51:29.930 に答える