我正在尝试重构我的代码以使其看起来更干净。 现在我有坏代码:
@member = Member.new
@member.build_local_board
@member.build_prospective
@member.build_alumni
@member.build_board
@member.build_job
@member.build_academic
@member.build_special_role
@member.build_conferences_member
@prospective = Prospective.new
@alumni = Alumni.new
@board = Board.new
@user = User.new
@job = Job.new
@academic = Academic.new
我试图让它与此类似:
models = %w(local_board, prospective, alumni, board, [...])
fields = [models]
fields.each do |f|
@f = f.new
@member.build_f
end
但我想我错过了一些 Ruby语法 ,因为我收到了这个错误:
undefined method 'new' for ["local_board,", "prospective"]:Array
看起来很简单。当你第一次学习框架而不是核心语言时,问题就出现了。
我提前感谢你。
答案 0 :(得分:3)
models = %w(local_board prospective alumni board)
models.each do |f|
klass = f.camelize.constantize
instance_variable_set("@#{f}", klass.new)
@member.send("build_#{f}".to_sym)
end
试试这段代码。