Ruby on rails 查找或创建方法
我有一个简单的CSV导入方法:Ruby on rails 查找或创建方法,ruby-on-rails,csv,methods,ruby-on-rails-4,find,Ruby On Rails,Csv,Methods,Ruby On Rails 4,Find,我有一个简单的CSV导入方法: def import Player.import(params[:file]) redirect_to players_path, notice: "Players Imported successfully" end 我检查的变量是“gr\u id”,但我无法正确实现它 基本上我需要 player = Player.find_by_id(row["gr_id"]) || new Player.create(chunk.first)
def import
Player.import(params[:file])
redirect_to players_path, notice: "Players Imported successfully"
end
我检查的变量是“gr\u id”,但我无法正确实现它
基本上我需要
player = Player.find_by_id(row["gr_id"]) || new
Player.create(chunk.first)
我缺少什么?假设gr_id等于玩家id,您可以使用以下选项:
Player.find_or_create_by(id: row['gr_id'])
Rails 4中的活动记录查找器示例:
这是假设Player具有属性name和status,并且CSV文件中的标题就是这样命名的。我尝试了未定义的局部变量或方法“row”for#,这是因为您尚未定义行。这样做后,查找器工作得很好。chunk包含什么?完整的导入代码就是我在问题“如何定义行”中的代码?。块包含一行中的每个哈希(1 | 2 | 3 | 4)。因此,如果1是:test,我们可以h[:test]等等。通常我使用foreach方法,它在所有行上循环。不管怎样,chunk听起来像是你的排。我会将chunk重命名为row。
Player.find_or_create_by(id: row['gr_id'])
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Player.find_or_create_by(name: row['name'], status: row['status']
end
# Player.create(chunk.first)
# Find if player already exists, then update attributes else create new Player
end
end