我試圖在每個循環的每行結尾處插入一個逗號作爲紅寶石。我不想在最後一行輸入逗號。我知道array.join(',')特性,但在這種情況下我有點困惑。Ruby每個循環的最後迭代
我該如何重構我的第一次嘗試去做我需要的東西?
重要的行
@headers.each do |header|
file.puts "`#{table[:source_database]}`.`#{table[:current_name]}`.`#{header[:current_name]}` AS `#{header[:magi_name]}`#{("," unless @headers.last == header)}" if header[:table_id] == table[:id]
end
全類
class Table < ActiveRecord::Base
has_many :headers
#--------------------------------------------------------------------------------------------------#
def self.generate
@tables = Table.select([:id, :source_database, :current_name, :magi_name])
@headers = Header.select([:id, :table_id, :current_name, :magi_name])
File.new("magi_generation.sql", "w")
@tables.each do |table|
File.open("magi_generation.sql", "a+") do |file|
file.puts "#Drops current view #{table[:magi_name]} and then recreates it using updated columns"
file.puts "DROP VIEW IF EXISTS `#{table[:magi_name]}`;"
file.puts "CREATE ALGORITHM=UNDEFINED DEFINER=`user`@`127.0.0.1` SQL SECURITY DEFINER VIEW `#{table[:magi_name]}`"
file.puts "AS select"
@headers.each do |header|
file.puts "`#{table[:source_database]}`.`#{table[:current_name]}`.`#{header[:current_name]}` AS `#{header[:magi_name]}`#{("," unless @headers.last == header)}" if header[:table_id] == table[:id]
end
file.puts "FROM `#{table[:source_database]}`.`#{table[:current_name]}`;"
file.puts ""
end
end
end
end
使用each_with_index並查看索引是否是最後一個? –
因此更改爲@ tables.each_with_index do | table,index |然後如果index.last ==什麼?我幾乎已經掌握了這些概念,但還沒有完全實現。 – jwg2s
index是一個數字,因此您應該將它與一個數字進行比較,例如:index == @ tables.length-1,那麼您應該得到「是最後一個元素」的布爾值 – robustus