-2
我有三种模式,分别是经销商,城市和州,我在这里有经销商和城市之间的一对多关系。其次,有一个城市和国家之间的多对多关系:如何使用rails4中的关联从excel上传数据
class Dealer < ActiveRecord::Base
belongs_to :city
end
class City < ActiveRecord::Base
belongs_to :state
has_many :dealers
end
class State < ActiveRecord::Base
has_many :cities
end
在dealers_controller.rb我有一个方法:
def import
Dealer.import(params[:file])
redirect_to dealers_path, notice: "Products imported."
end
这将参考在经销商模式的方法:
def self.import(file)
spreadsheet = open_spreadsheet(file)
city = City.new
state = State.new
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
dealer = find_by_id(row["id"].to_i) || new
dealer.dealerName = row["DEALERSHIPNAME"]
dealer.address = row["ADDRESS"]
dealer.pincode = row["PINCODE"]
city.name = row["CITY"]
state.name = row["STATE"]
dealer.phoneNo = row["PHONENO"]
dealer.mobileNo = row["MOBILE"]
city.save!
state.save!
dealer.save!
end
end
def self.open_spreadsheet(file)
case File.extname(file.original_filename)
when '.xls' then Roo::Excel.new(file.path)
when '.xlsx' then Roo::Excelx.new(file.path)
else raise "Unknown file type: #{file.original_filename}"
end
end
问题是,经销商数据完美地存储在经销商表中,但城市和州正在存储一次,只有最后一条记录,经销商表中的city_id为空,而且c_中的state_id ty表也是null。
如何使用此经销商模型上传城市和州表中的城市和州的全部数据?
我们如何上传Excel文件,它将填充所有三个表中的一对多关联?
这里我需要为每个城市和州行创建新的对象 –