在Ruby on Rails 4.2.3中重构

时间:2015-09-12 05:07:20

标签: ruby-on-rails ruby refactoring

我正在尝试重构我的代码以使其看起来更干净。 现在我有代码:

@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

看起来很简单。当你第一次学习框架而不是核心语言时,问题就出现了。

我提前感谢你。

1 个答案:

答案 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

试试这段代码。