Ruby on rails 自动生成的方法或变量的正确术语?

Ruby on rails 自动生成的方法或变量的正确术语?,ruby-on-rails,terminology,Ruby On Rails,Terminology,Rails大量使用自动生成各种方法和变量。在我自己的私人笔记中,我将这些称为动态方法,但这些东西的官方名称是什么 这些动态方法的一些示例: 创建这样的关系: class Carriage < ActiveRecord::Base # attrs: id, wheels, spare has_one :horse end class Horse < ActiveRecord::Base # attrs: id, carriage_id, name bel

Rails大量使用自动生成各种方法和变量。在我自己的私人笔记中,我将这些称为动态方法,但这些东西的官方名称是什么

这些动态方法的一些示例:

创建这样的关系:

class Carriage < ActiveRecord::Base
    # attrs: id, wheels, spare
    has_one :horse
end
class Horse < ActiveRecord::Base
    # attrs: id, carriage_id, name
    belongs_to :carriage
end  
在该示例中,create_horse将是动态方法

另一个例子:

如果要创建一个模型方法来将轮子添加到车厢中:


我可以访问intance的属性,每个属性都有自己的动态变量:wheels和spare。id的作用域也限定为该方法。我称这些动态变量,但它们的正式名称是什么?

正确的答案是,这些方法是在运行时由生成的


基本上,如果有一个正式名称,我希望在中找到它们,但是我没有看到它们在那里被称为除方法之外的任何东西。我通常将它们称为“魔术方法”,因为Rails为您创建它们“像魔术一样”,但这是。。。比方说,可能不是标准的。很有趣,但他们似乎没有名字。define_构造函数是否意味着它们可能被称为构造函数?一点也不,它们之所以被称为构造函数是因为它们构建对象,但这并不意味着它们是元编程的结果:
> Carriage.create(wheels: 2).create_horse(name: "Fledge")
class Carriage < ActiveRecord::Base
    self.wheels = wheels + 1 if spare == true 
end
# Defines the (build|create)_association methods for belongs_to or has_one association

def self.define_constructors(mixin, name)
  mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
    def build_#{name}(*args, &block)
      association(:#{name}).build(*args, &block)
    end

    def create_#{name}(*args, &block)
      association(:#{name}).create(*args, &block)
    end

    def create_#{name}!(*args, &block)
      association(:#{name}).create!(*args, &block)
    end
  CODE
end