Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么';a的实际类有多少关系?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

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的做法有所不同。我同意,只要你知道有黑暗魔法在进行,就没关系。但是当它发生并且没有很好的文档记录时是很可怕的,所以有一个可靠的方法来检测和处理这些情况会很好。我只是觉得一定有办法上真正的课。