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
考え?