Ruby on rails 什么';a的实际类有多少关系?
基本底漆:Ruby on rails 什么';a的实际类有多少关系?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,基本底漆: class User has_many :programs, :through => :memberships has_many :memberships end class Program end class Membership belongs_to :user belongs_to :program end 控制台: User.new.save Program.new.save User.programs << Program.firs
class User
has_many :programs, :through => :memberships
has_many :memberships
end
class Program
end
class Membership
belongs_to :user
belongs_to :program
end
控制台:
User.new.save
Program.new.save
User.programs << Program.first
User.first.programs.class
# => Array
User.first.programs.methods.grep /where/
# => []
User.first.programs.where :id => 1
# => [#<Program id: 1>]
User.first.programs.where(:id => 1).class
# => ActiveRecord::Relation
User.new.save
Program.new.save
用户程序数组
User.first.programs.methods.grep/where/
# => []
User.first.programs.where:id=>1
# => [#]
User.first.programs.where(:id=>1).class
#=>ActiveRecord::关系
所以问题是,User.first.programs
,has\u many方法,似乎返回一个结果,它像ActiveRecord::Relation
一样吠叫,接受像Relation
这样的方法,但自识别为数组
,并与类数组
的实例共享其方法
那么给出了什么呢?这确实令人惊讶,不知道这是否是最好的解决方案,但至少(在课堂上)有记录: blog.posts中的关联代理 将blog中的对象设置为@owner 将其帖子收集为@target, @reflection对象表示 a:有很多宏 这门课有大部分的基础知识 已删除实例方法,并且 将未知方法委托给@target via方法_缺失。作为一个极端的例子, 它甚至删除了类方法和 这就是为什么你会 blog.posts.class#=>数组 blog.posts背后的对象不是 数组,但是 ActiveRecord::Associations::HasManyAssociation
这确实令人惊讶,不知道这是否是最好的解决方案,但至少(在课堂上)有记录: blog.posts中的关联代理 将blog中的对象设置为@owner 将其帖子收集为@target, @reflection对象表示 a:有很多宏 这门课有大部分的基础知识 已删除实例方法,并且 将未知方法委托给@target via方法_缺失。作为一个极端的例子, 它甚至删除了类方法和 这就是为什么你会 blog.posts.class#=>数组 blog.posts背后的对象不是 数组,但是 ActiveRecord::Associations::HasManyAssociation
事实上,Rails(以及Ruby)中更奇怪的部分之一。当然,接下来的问题是:除了祈祷文件外,人们如何处理这种情况?这里有一个问题:Ruby的黑魔法来自于设计,这没关系,所以我想说避免这类问题的最好方法就是“不要这样做”。我没有检查,但我认为(我希望)Rails 3的做法有所不同。我同意,只要你知道有黑暗魔法在进行,就没关系。但是当它发生并且没有很好的文档记录时是很可怕的,所以有一个可靠的方法来检测和处理这些情况会很好。我只是觉得必须有一种方法来获得真正的类。事实上,Rails(以及Ruby)中更奇怪的部分之一。当然,接下来的问题是:除了祈祷文件外,人们如何处理这种情况?这里有一个问题:Ruby的黑魔法来自于设计,这没关系,所以我想说避免这类问题的最好方法就是“不要这样做”。我没有检查,但我认为(我希望)Rails 3的做法有所不同。我同意,只要你知道有黑暗魔法在进行,就没关系。但是当它发生并且没有很好的文档记录时是很可怕的,所以有一个可靠的方法来检测和处理这些情况会很好。我只是觉得一定有办法上真正的课。