While implementing a DBMS similar to Chadwick database , I'm encountering lots of similar codes like below (Please refer to the upper link if you think the database design itself is wrong.)
self.away_lineup1_batter = player if player.id === away_lineup1_batter_id
self.away_lineup2_batter = player if player.id === away_lineup2_batter_id
self.away_lineup3_batter = player if player.id === away_lineup3_batter_id
self.away_lineup4_batter = player if player.id === away_lineup4_batter_id
self.away_lineup5_batter = player if player.id === away_lineup5_batter_id
self.away_lineup6_batter = player if player.id === away_lineup6_batter_id
self.away_lineup7_batter = player if player.id === away_lineup7_batter_id
self.away_lineup8_batter = player if player.id === away_lineup8_batter_id
self.away_lineup9_batter = player if player.id === away_lineup9_batter_id
or
# Using jbuilder gem.
json.pos2_fielder do
json.partial! 'players/simple_hash', locals: {data: data.pos2_fielder}
end unless data.pos2_fielder.nil?
json.pos3_fielder do
json.partial! 'players/simple_hash', locals: {data: data.pos3_fielder}
end unless data.pos3_fielder.nil?
json.pos4_fielder do
json.partial! 'players/simple_hash', locals: {data: data.pos4_fielder}
end unless data.pos4_fielder.nil?
json.pos5_fielder do
json.partial! 'players/simple_hash', locals: {data: data.pos5_fielder}
end unless data.pos5_fielder.nil?
json.pos6_fielder do
json.partial! 'players/simple_hash', locals: {data: data.pos6_fielder}
end unless data.pos6_fielder.nil?
json.pos7_fielder do
json.partial! 'players/simple_hash', locals: {data: data.pos7_fielder}
end unless data.pos7_fielder.nil?
json.pos8_fielder do
json.partial! 'players/simple_hash', locals: {data: data.pos8_fielder}
end unless data.pos8_fielder.nil?
json.pos9_fielder do
json.partial! 'players/simple_hash', locals: {data: data.pos9_fielder}
end unless data.pos9_fielder.nil?
Copying and pasting 9 rows of codes aren't really a big deal but I think there could be a better solution for this. Any suggestion?
The primary suggestion: use arrays in Ruby and properly normalised database tables. Instead of having pos2_fielder
, pos3_fielder
... in one table, you should have a table with position
property. (I can't say anything more specific as I do not know what your database looks like precisely, aside from "bad").
To answer the literal question:
1.upto(9) do |num|
if player.id === send(:"away_lineup#{num}_batter_id")
send(:"away_lineup#{num}_batter=", player)
end
end
怎么了
[1,2,3,4,5,6,7,8,9].each { |i| eval("self.away_lineup#{i}_batter = player if player.id === away_lineup#{i}_batter_id" }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.