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