Rails 与外键之间的关系?

Posted

技术标签:

【中文标题】Rails 与外键之间的关系?【英文标题】:Rails relationships with foreign key between? 【发布时间】:2013-07-27 17:55:42 【问题描述】:

我的 Rails 应用程序中有两个实体,我正在尝试建立关系 - 检查和月份。 Month 的实例将具有 start_date 和 end_date - 这些日期与日历月不完全一致。 Check 的实例将有一个 deposit_date。我想以某种方式描述一种关系,其中月份有很多支票,存款日期在月份的开始日期和结束日期之间。这可能吗?

【问题讨论】:

【参考方案1】:

这是可能的。您可以自定义您的 relation 参考。

class Month < ActiveRecord::Base
  has_many :checks, ->(month)  where deposited_at: (month.start_at)..(month.end_at) , class_name: 'Check'
end

您实际上不需要指定class_name,除非您更改关系名称。例如,如果您使用 current_checks 而不是简单地命名为 checks

【讨论】:

这个答案有帮助吗? 实际上,我后来发现虽然这种方法对我没有错误,但并没有给我预期的结果。问题是它仍然期望检查和月份之间存在主键/外键关系,并将 lambda 附加到语句的末尾。 哦,是的,对不起,我以为你已经准备好了,因为那是标准的 Rails 约定。【参考方案2】:

我最后做的是从 Month 类中删除 has_many :checks,并定义了我自己的方法:

class Month < ActiveRecord::Base
  # other associations and validations omitted

  def checks
    Check.where(deposit_date: self.start_date..self.end_date)
  end
end

我不知道这是否会被视为 hack,但它给了我我需要的东西。当然,我愿意看到更多的“Rails 方式”来做到这一点。

【讨论】:

以上是关于Rails 与外键之间的关系?的主要内容,如果未能解决你的问题,请参考以下文章

EF Code First 导航属性 与外键

EF Code First 导航属性 与外键

关系与外键约束

sql server的主键与外键问题

powerdesigner如何设置主外键关系?

数据库中的主键与外键的关系