Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 RubyonRails:属于同一型号的同一对,并且在同一对上有许多_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails RubyonRails:属于同一型号的同一对,并且在同一对上有许多

Ruby on rails RubyonRails:属于同一型号的同一对,并且在同一对上有许多,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,首先,我的模型定义: class Certificate < ActiveRecord::Base belongs_to :certificate_series end class CertificateSeries < ActiveRecord::Base has_many :certificates belongs_to :last_certificate_in_series, :class_name => "Certificate", :foreign_ke

首先,我的模型定义:

class Certificate < ActiveRecord::Base
  belongs_to :certificate_series
end

class CertificateSeries < ActiveRecord::Base
  has_many :certificates
  belongs_to :last_certificate_in_series, :class_name => "Certificate", :foreign_key => :last_certificate_in_series_id
end
似乎没有正确地定义它。我可以调用CertificateSeries.last\u certificate\u in_series,但即使将\u series\u id中的last\u certificate\u设置为有效值,它也只返回nilClass


我愿意听取关于其他方法的建议。

事实上,你不需要额外的
关联。听起来很自然,
certificate\u系列中的最后一个证书就是您想要的证书。因此,您可以简单地执行以下操作:

class Certificate < ActiveRecord::Base
  belongs_to :certificate_series
end

class CertificateSeries < ActiveRecord::Base
  has_many :certificates
end

certificate_series.certificates.last
类证书 > p>您可以考虑ActhsAsListLoopin。
然后在证书模型中:

belongs_to :certificate_series
acts_as_list :scope => certificate_series

您应该创建一个返回系列中最后一个证书的方法。您不需要为此创建其他关系

class Certificate < ActiveRecord::Base
  belongs_to :certificate_series
end

class CertificateSeries < ActiveRecord::Base
  has_many :certificates

  def last_certificate_in_series
    certificates.last
  end
end
类证书
顺便说一句,我想到了实现我自己的列表。谢谢,我会检查这个插件。没错,我考虑过这个问题,但我也考虑过性能问题。因此,当您从数据库检索证书系列时,您不需要所有证书,只需要最后一个,对吗?与Peter Wong的解决方案相同,只作为类方法实现。正如我看到的,这将获取属于证书系列的所有证书,然后遍历列表,并返回最后一个证书。将有一个开销获取。现在,为了简单起见,我选择了这个答案,因为我认为我可能在项目的早期就过度优化了。我现在没有办法检查,但如果我没有弄错的话,调用certificates.last应该从certificate\u series\u id=1 ORDER BY id LIMIT 1
或类似内容的证书生成查询
SELECT*。当然,证书系列id将取决于系列的实际id。
class Certificate < ActiveRecord::Base
  belongs_to :certificate_series
end

class CertificateSeries < ActiveRecord::Base
  has_many :certificates

  def last_certificate_in_series
    certificates.last
  end
end