我的应用程序上有一个 csv 导入系统(仅在本地使用),它逐行解析 csv 文件并将数据添加到数据库表中。这是基于教程 here 。require 'csv'def csv_import @parsed_file=CSV::Reader.parse(params[:dump][:file]) n = 0 @parsed_file.each_with_index do |row, i| next if i == 0 #ignore the first row course = Course.new course.title = row[0] course.unit_code = row[1] course.course_type = row[2] course.value = row[3] course.pass_mark = row[4] if course.save n = n+1 GC.start if n%50==0 end flash.now[:message] = "CSV Import Successful, #{n} new courses added to the database." end redirect_to(courses_url)end这一切都在类(class) Controller 中,并且工作正常。类(class) HABTM 年和 HABTM 类(class)是有关系的。在 csv 文件中(有效地在行 [5] 到行 [8])是 year_id s。有没有办法可以在上面的方法中添加它。我对如何遍历 4 个项目并将它们添加到 course_years 表感到困惑。谢谢 jack 最佳答案 您可以通过在将“正常”数据添加到模型后添加一个简单循环,并使用 ...course.value = row[3]course.pass_mark = row[4]5.upto(8).each do |i| one_year = Year.find(row[i]) course.years << one_year if one_yearendif course.save n = n+1...如果您想确保这些值有效,和/或更改查找以另一种方式定位您的年份,您可以在循环中添加更多检查。当相关数据像这样“拖到最后”时,另一种方法是继续添加,直到没有任何可添加的内容,如果尚不存在,还添加年份本身:...course.value = row[3]course.pass_mark = row[4]row[5..-1].each do |year_id| one_year = Year.find_or_create_by_id(year_id) course.years << one_yearendif course.save n = n+1...有很多不同的方法可以做到这一点,正确的方法实际上取决于您的实际数据,但这是基本方法。关于ruby-on-rails - Rails CSV 导入,添加到相关表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2827209/
10-12 19:26